Create OS part 2

В поисках Силы.
Целью написания ОС, является не создание новой СуперОС, а изучение "высокого исскуства
работы на нижнем уровне" :)
Я постараюсь в своих статьях охватить наиболее широкое количество материала, особенно о
защищенном режиме, такое как: распределение памяти(gdt), прерывания(idt),
многозадачность (tss), а так-же многие другие.

В этой статье мы загрузим вторичный загрузчик, и перейдем на него.

Мы имеем минимальный загрузчик, который ничего у нас не делает.
Нам надо:
1 Загрузить вторичный загрузчик.
2 Перейти на него так чтобы он работал. :)

Загружать мы будем его используя 2-ю функцию 0x13-го прерывания.

;DL - номер диска (носителя)
;DH - номер головки
;CH - номер дорожки
;CL - номер сектора
;AL - количество секторов (в сумме не более одной дорожки)
;ES:BX - адрес буфера в памяти, в который будут считаны данные

Немного о дискетах:
В дисководе флоппи дисков имеется 2 головки (т.е. мы можем читать/писать
с верхней и нижней стороны дискеты), на дискете имеется 80 дорожек, на каждой
дорожке - 18 секторов. Поэтому адрес на fdd обычно пишется вот так x:yy:zz
где x - номер головки, yy - дорожки, zz - сектора.
cм. рисунок: http://ass3mbler.narod.ru/IMG00001.GIF

Сектора считаются с еденицы. Головки и дорожки - с нуля.
Размер вторичного загрузчика ограничим пока 2048 байтами.

Во избежание глюков, org надо писать выше кода, иначе times неправильно
высчитывает размер. см ниже.

; -------------------------------------------

org 07C00h
main:
jmp far 00:entry1

entry1:
    cli
    mov ax,cs
    mov ds,ax
    sti

    mov ah,14
    xor bl,bl

    mov bx,tex1
.strt:
    mov al,[bx]
    
    test al,al
    jz .exit_

    inc bx
    int 10h
    jmp .strt

.exit_:

    mov ax,0x0860    
    mov es,ax    ; Cегмент куда загружать будем
    
    sub dx,dx    
    sub ch,ch
            ; вторичный загрузчик с 0:0:2 - 0:0:5
    mov cl,2    ; будет в памяти с 0x08600
    mov al,4
    sub bx,bx    ; 0x0860:00
    mov ah,2
    int 0x13
    
    



     jmp far 0:0x08600    ; прыгаем на него
    
    
    tex1 db 'First Loader loaded',0Dh,0
    
    
times 510-($-main) db 0
db 0xAA, 0x55    

; ---------------------------------------------------
; second loader
; Вторичный загрузчик

org 0x8600
sl:
    cli
    mov ax,cs
    mov ds,ax
    sti

; вывод сообщения.
    
    mov ah,14
    xor bl,bl

    mov bx,tex
.strt:
    mov al,[bx]
    
    test al,al
    jz .exit_

    inc bx
    int 10h
    jmp .strt

    
.exit_:
    cli
    jmp $
    
    tex db 0Ah,'Second Loader is Loaded',0Dh,0
    
times 2046-($-sl) db 0
db 0xAA, 0x55    

; -------------------------------------------

Прим из fasm:

    Локальные метки:

        sigma:
        .alpha:                       ; локальная метка (1)
             jmp  .alpha              ; пеpеход на (1)
        omega:
        .alpha:                       ; локальная метка (2)
             jmp  .alpha              ; пеpеход на (2)
             jmp  sigma.alpha         ; пеpеход на (1)
             
             




Вторичный загрузчик пока ничего не делает, только выводит сообщение что он загружен.

Компилируем получившийся файл, и с помощью rawrite записываем его на дискету,
перезагружаемся. Можно просто подключить его как дискету в vmware или
Virtual PC.

На все возникшие у тебя вопросы отвечу незамедлительно, пиши на mail: skif_q[myy]mail.ru
или в forum.

Skif_Q.

np: Dj Toxic - Its Killing Me (Original Extended Mix)
Категория: Coding | Добавил: Aules (02.08.2011) | Автор: Skif_Q
Просмотров: 318 | Теги: OS, Coding, ASM | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
close