@@ -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+
690791idt:
691792 mov r9 , msg_idt
692793 call print
@@ -1934,11 +2035,13 @@ fmt_physical_addr db "Physical address size [bits] = %d", 0
19342035fmt_logical_addr db " | Logical address size [bits] = %d" , 0x0A , 0
19352036
19362037msg_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
19392040msg_test: db "String de prueba" , 0x0A , 0
19402041msg_test_hex: db "Value = 0x%h" , 0x0A , 0
19412042msg_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
19632066BASE_PD_L equ 0x00010000 ;; Solo si pag 2MiB.
19642067BASE_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
0 commit comments