Skip to content

Commit acbb3ac

Browse files
creo que en 1gb anda pero con 2mb si fb afuera no, estoy arreglando eso
1 parent b158145 commit acbb3ac

File tree

4 files changed

+138
-35
lines changed

4 files changed

+138
-35
lines changed

asm/tsl.asm

Lines changed: 138 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,10 @@ fb_overflows_initialized_pdpt:
391391
.pag_2mb:
392392
mov rax, [FB]
393393
add rax, [FB_SIZE]
394-
395-
cmp rax, PHYSICAL_ADDR_MAX_INITIALIZED
394+
mov rbx, PHYSICAL_ADDR_MAX_INITIALIZED
395+
cmp rax, rbx
396396
jbe .continue
397397

398-
mov r9, msg_pdpt_add_fb_entry
399-
call print
400-
401398
mov byte [pd_fb_used], 1
402399
mov rsi, [FB]
403400
mov r9, msg_pdpt_fb_addr
@@ -406,8 +403,14 @@ fb_overflows_initialized_pdpt:
406403
mov rax, [FB]
407404
shr rax, 9 * 2 + 12
408405
mov qword [BASE_PDPT_L + 8 * rax], BASE_PD_FB
406+
407+
mov rsi, rax
408+
mov r9, msg_pdpt_add_fb_entry
409+
call print
409410
.continue:
410411

412+
;;cli
413+
;;hlt
411414

412415
;; copio entrada 0x100 de pdpt original que contiene fb a mi nueva tabla.
413416
;;mov rax, [0x6de02000 + 8 * 0x100]
@@ -458,6 +461,92 @@ paging_tables_ready:
458461
mov r9, msg_ready
459462
call print
460463

464+
465+
466+
467+
468+
469+
;;;;;;;;;;;;;;;;;;;;;
470+
;;;; comparacion de 1er qword framebuffer
471+
;;mov rax, [0x6de02000 + 8 * 0x100]
472+
;;mov [0x3000 + 8 * 0x100], rax
473+
474+
mov rax, cr3 ;; cr3
475+
and rax, 0xFFFFFFFFFFFFF000
476+
mov rax, [rax];; rax = &pdpt
477+
and rax, 0xFFFFFFFFFFFFF000
478+
mov rax, [rax + 8 * 0x100];; rax = &pd
479+
and rax, 0xFFFFFFFFFFFFF000
480+
mov rax, [rax + 0 * 8] ;; rax = page2mb_0
481+
mov rsi, rax
482+
mov r9, msg_test_hex
483+
call print
484+
485+
mov rax, cr3 ;; cr3
486+
and rax, 0xFFFFFFFFFFFFF000
487+
mov rax, [rax];; rax = &pdpt
488+
and rax, 0xFFFFFFFFFFFFF000
489+
mov rax, [rax + 8 * 0x100];; rax = &pd
490+
and rax, 0xFFFFFFFFFFFFF000
491+
mov rax, [rax + 1 * 8] ;; rax = page2mb_0
492+
mov rsi, rax
493+
mov r9, msg_test_hex
494+
call print
495+
496+
mov rax, cr3 ;; cr3
497+
and rax, 0xFFFFFFFFFFFFF000
498+
mov rax, [rax];; rax = &pdpt
499+
and rax, 0xFFFFFFFFFFFFF000
500+
mov rax, [rax + 8 * 0x100];; rax = &pd
501+
and rax, 0xFFFFFFFFFFFFF000
502+
mov rax, [rax + 2 * 8] ;; rax = page2mb_0
503+
mov rsi, rax
504+
mov r9, msg_test_hex
505+
call print
506+
;;;;;;;;;;;;;;;;;;;;;
507+
mov rax, BASE_PML4 ;; cr3
508+
and rax, 0xFFFFFFFFFFFFF000
509+
mov rax, [rax];; rax = &pdpt
510+
and rax, 0xFFFFFFFFFFFFF000
511+
mov rax, [rax + 8 * 0x100];; rax = &pd
512+
and rax, 0xFFFFFFFFFFFFF000
513+
mov rax, [rax + 0 * 8] ;; rax = page2mb_0
514+
mov rsi, rax
515+
mov r9, msg_test_hex
516+
call print
517+
518+
mov rax, BASE_PML4 ;; cr3
519+
and rax, 0xFFFFFFFFFFFFF000
520+
mov rax, [rax];; rax = &pdpt
521+
and rax, 0xFFFFFFFFFFFFF000
522+
mov rax, [rax + 8 * 0x100];; rax = &pd
523+
and rax, 0xFFFFFFFFFFFFF000
524+
mov rax, [rax + 1 * 8] ;; rax = page2mb_0
525+
mov rsi, rax
526+
mov r9, msg_test_hex
527+
call print
528+
529+
mov rax, BASE_PML4 ;; cr3
530+
and rax, 0xFFFFFFFFFFFFF000
531+
mov rax, [rax];; rax = &pdpt
532+
and rax, 0xFFFFFFFFFFFFF000
533+
mov rax, [rax + 8 * 0x100];; rax = &pd
534+
and rax, 0xFFFFFFFFFFFFF000
535+
mov rax, [rax + 2 * 8] ;; rax = page2mb_0
536+
mov rsi, rax
537+
mov r9, msg_test_hex
538+
call print
539+
540+
541+
;; cli
542+
;; hlt
543+
544+
545+
546+
547+
548+
549+
461550
jmp load_gdt
462551

463552

@@ -503,34 +592,34 @@ load_gdt:
503592
;;;;;;;;;;;;;;;;;;; imprime mapeo sin cambiar
504593
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
505594

506-
;; mov rax, 0x2000 ;; cr3
507-
;; mov rsi, rax
508-
;; mov r9, msg_test_hex
509-
;; call print
595+
mov rax, 0x2000 ;; cr3
596+
mov rsi, rax
597+
mov r9, msg_test_hex
598+
call print
510599

511-
;; mov rax, 0x2000 ;; cr3
512-
;; mov rax, [rax];; rax = &pdpt
513-
;; mov rsi, rax
514-
;; mov r9, msg_test_hex
515-
;; call print
600+
mov rax, 0x2000 ;; cr3
601+
mov rax, [rax];; rax = &pdpt
602+
mov rsi, rax
603+
mov r9, msg_test_hex
604+
call print
516605

517-
;; mov rax, 0x2000 ;; cr3
518-
;; mov rax, [rax];; rax = &pdpt
519-
;; and rax, 0xFFFFFFFFFFFFF000
520-
;; mov rax, [rax];; rax = &pd
521-
;; mov rsi, rax
522-
;; mov r9, msg_test_hex
523-
;; call print
606+
mov rax, 0x2000 ;; cr3
607+
mov rax, [rax];; rax = &pdpt
608+
and rax, 0xFFFFFFFFFFFFF000
609+
mov rax, [rax+8*0x100];; rax = &pd
610+
mov rsi, rax
611+
mov r9, msg_test_hex
612+
call print
524613

525-
;; mov rax, 0x2000 ;; cr3
526-
;; mov rax, [rax];; rax = &pdpt
527-
;; and rax, 0xFFFFFFFFFFFFF000
528-
;; mov rax, [rax];; rax = &pd
529-
;; and rax, 0xFFFFFFFFFFFFF000
530-
;; mov rax, [rax + 0 * 8] ;; rax = page2mb_0
531-
;; mov rsi, rax
532-
;; mov r9, msg_test_hex
533-
;; call print
614+
mov rax, 0x2000 ;; cr3
615+
mov rax, [rax];; rax = &pdpt
616+
and rax, 0xFFFFFFFFFFFFF000
617+
mov rax, [rax+8*0x100];; rax = &pd
618+
and rax, 0xFFFFFFFFFFFFF000
619+
mov rax, [rax + 0 * 8] ;; rax = page2mb_0
620+
mov rsi, rax
621+
mov r9, msg_test_hex
622+
call print
534623

535624
;; mov rax, 0x2000 ;; cr3
536625
;; mov rax, [rax];; ra x= &pdpt
@@ -653,7 +742,13 @@ cr3_load:
653742

654743
mov rsi, cr3
655744
mov r9, msg_cr3_at_this_point
656-
call print
745+
;;call print
746+
747+
748+
749+
750+
751+
657752

658753
xor rax, rax
659754
xor rbx, rbx
@@ -681,12 +776,18 @@ cr3_load:
681776

682777
;; Set CS with a far return
683778
push SYS64_CODE_SEL
684-
push clearcs64
779+
push clear_cs64
685780
retfq
686781

687-
clearcs64:
782+
clear_cs64:
688783
lgdt [GDTR64] ;; Reload the GDT
689784

785+
786+
cli
787+
hlt
788+
789+
790+
690791
idt:
691792
mov r9, msg_idt
692793
call print
@@ -1934,11 +2035,13 @@ fmt_physical_addr db "Physical address size [bits] = %d", 0
19342035
fmt_logical_addr db " | Logical address size [bits] = %d", 0x0A, 0
19352036

19362037
msg_pdpt_fb_addr: db "FB at %h ", 0
1937-
msg_pdpt_add_fb_entry: db "needs PDPT entry = %h.", 0x0A, 0
2038+
msg_pdpt_add_fb_entry: db "needs PDPT entry = 0x%h", 0x0A, 0
19382039

19392040
msg_test: db "String de prueba", 0x0A, 0
19402041
msg_test_hex: db "Value = 0x%h", 0x0A, 0
19412042
msg_test_num: db "Value = 0x%d", 0x0A, 0
2043+
msg_test_below: db "String de prueba: below", 0x0A, 0
2044+
msg_test_above: db "String de prueba: above", 0x0A, 0
19422045

19432046

19442047
;; Some additional system vars.
@@ -1963,7 +2066,7 @@ BASE_PD_FB equ 0x0000F000
19632066
BASE_PD_L equ 0x00010000 ;; Solo si pag 2MiB.
19642067
BASE_PD_H equ 0x00030000 ;; Solo si pag 2MiB.
19652068

1966-
PHYSICAL_ADDR_MAX_INITIALIZED equ 0x7FFFFFFFF ;; Por defecto se inicializan 32\
2069+
PHYSICAL_ADDR_MAX_INITIALIZED equ 0x7FFFFFFFF ;; Por defecto se inicializan 32
19672070
;; GiB cuando page size = 2MiB.
19682071

19692072

build/tsl.sys

0 Bytes
Binary file not shown.

out/BOOTX64.EFI

0 Bytes
Binary file not shown.

out/payload.sys

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)