Виртуальная Адресация

Тема в разделе "WASM.OS.DEVEL", создана пользователем 111u3, 4 сен 2009.

  1. 111u3

    111u3 New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2009
    Сообщения:
    5
    При написании собственной ос решил попробовать примеров
    но этот код вроде работает но почему то не выводится последнее сообщение
    Код (Text):
    1. ;memory map 0x0
    2. use16
    3. org 0x0
    4.     jmp start_boot
    5. start_msg       db 13,10,'Starting boot',0
    6. loadp_msg       db 13,10,'Go to protected mode...',0
    7. lens_msg:
    8. print_message:
    9.     push ax bx cx dx
    10. print:
    11.     lodsb
    12.     or al,al
    13.     je end_print
    14.     mov ah,0eh
    15.     mov bx,07h
    16.     int 10h
    17.     jmp print
    18. end_print:
    19.     pop dx cx bx ax
    20.     retn
    21. start_boot:
    22. ;setup selectors
    23.     mov ax,0x1000
    24.     mov es,ax
    25.     mov ds,ax
    26.  
    27.     mov ax,0x2000
    28.     mov ss,ax
    29.     mov sp,0xffff
    30. ;print intro message
    31.     mov si,start_msg
    32.     call print_message
    33. ;print warning message
    34.     mov si,loadp_msg
    35.     call print_message
    36. ;================================
    37. ; switch to 32 bit protected mode
    38. ;================================
    39. ;GDTs
    40. os_data     equ os_data_1-gdts
    41. os_code     equ os_code_1-gdts
    42. ;disable all irqs
    43.     cli
    44. ;mask all irqs
    45.     mov al,255
    46.     out 0xa1,al
    47.     out 0x21,al
    48. ;enable a20
    49. f1: in al,0x64
    50.     test al,2
    51.     jnz f1
    52.     mov al,0xd1
    53.     out 0x64,al
    54. f2: in al,0x64
    55.     test al,2
    56.     jnz f2
    57.     mov al,0xdf
    58.     out 0x60,al
    59. f3: in al,0x64
    60.     test al,2
    61.     jnz f3
    62.     mov al,0xff
    63.     out 0x64,al
    64. ;load global descriptor table
    65.     lgdt [cs:gdts-0x10000]
    66. ;enable protected mode
    67.     mov eax,cr0
    68.     or al,1
    69.     mov cr0,eax
    70.     jmp $+2
    71. ;jmp to enable 32 bit mode
    72.     jmp pword os_code:c32
    73.  
    74. use32
    75. kernel_32bit:
    76.  
    77. org $+0x10000
    78. ;=================
    79. ;32 bit entry
    80. ;=================
    81. align 4
    82. c32:
    83. ;Setup selectors
    84.     mov ax,os_data
    85.     mov ds,ax
    86.     mov fs,ax
    87.     mov gs,ax
    88.     mov ss,ax
    89.     mov es,ax
    90.     mov esp,0x3ec00
    91. ;making page catalog
    92.     mov edi,0x100000 ;start of page catalog
    93.     mov eax,0x101007 ;one significant element
    94.     stosd
    95.     mov ecx,1023 ;other 1023 elements
    96.     xor eax,eax
    97.     rep stosd
    98. ;making page table 0
    99.     mov eax,0x7
    100.     mov ecx,1024
    101. fill_page_table:
    102.     stosd
    103.     add eax,0x1000
    104.     loop fill_page_table
    105. ;move catalog address in cr3
    106.     mov eax,0x100000
    107.     mov cr3,eax
    108. ;enable page addressing
    109.     mov eax,cr0
    110.     or eax,0x8000000
    111.     mov cr0,eax
    112. ;print message of enbled page addressing
    113.     mov esi,mes
    114.     mov edi,0xb8000+800
    115.    _puts:
    116.     lodsb
    117.     mov ah,0x7
    118.     stosw
    119.     test al,al
    120.     jnz _puts
    121. ;change phisical adress page 12000h on 0b8000h
    122.     mov eax,0xb8007
    123.     mov [es:0x101000+0x12*4],eax
    124. ;print mes1 in standart adress
    125.     mov esi,mes1
    126.     mov edi,0xb8000+930
    127.    _puts1:
    128.     lodsb
    129.     mov ah,0x7
    130.     stosw
    131.     test al,al
    132.     jnz _puts1
    133. ;print mes2 in unstandart adress
    134.     mov esi,mes2
    135.     mov edi,0x12000+1000
    136.    _puts2:
    137.     lodsb
    138.     mov ah,0x7
    139.     stosw
    140.     test al,al
    141.     jnz _puts2
    142.     hlt
    143. mes db 'Page addressing in enabled'
    144.     db 0
    145. mes1    db 'This string was outputted to standart adress 0b8000h...'
    146.     db 0
    147.  
    148. mes2    db 'And this one - to dummy adress 0x120a0. Cool?'
    149.     db 'Now press RESET...'
    150.     db 0
    151. gdts:
    152.             dw gdte-$-1
    153.             dd gdts
    154.             dw 0
    155. os_code_1:
    156.             dq 0x00cf9a000000ffff
    157.  
    158. os_data_1:
    159.             dq 0x00cf92000000ffff
    160. gdte:
    загрузчик взят немног допиленный из menuet OS
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Это же не видео-память.
     
  3. 111u3

    111u3 New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2009
    Сообщения:
    5
    я для чего страничную адресацию включаю и и меняю физ адрес конкретной страницы?
     
  4. 111u3

    111u3 New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2009
    Сообщения:
    5
    И вообще в в этом коде багов больше чем видно но не там где вы указали. + я уже давно переправил версию на насме и там все заработало
     
  5. Mopga

    Mopga Иван

    Публикаций:
    0
    Регистрация:
    21 окт 2009
    Сообщения:
    13
    Адрес:
    Новороссийск
    а как вы компилируете этот код и пихаете в загрузчик на дискете или где там, есть какие-то средства?
     
  6. 111u3

    111u3 New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2009
    Сообщения:
    5
    Этот код компилил фасмом, текущий насмом. Загружаестя своим загрузчиком с дискеты. Там он находится в виде бинарного файла.