2012-05-13 2 views
4

Я использую VirtualBox 4.1.14 в Windows 7, и я пытаюсь заставить его запустить мою тестовую ОС. Я использую код сборки ниже, и я его компиляции сЗапуск ОС на VirtualBox

NASM -f бен -o boot.bin boot.asm

Я пытаюсь преобразовать полученный бен файл в ISO, что VB4.1.14 может (я не хочу платить деньги или лимиты от пробной программы). Я попытался загрузить различные конвертеры, такие как bin2iso, но VB придумывает разные ошибки, когда я пытаюсь открыть полученный ISO внутри него, как VERR_NOT_SUPPORTED и другие.

Я бы предпочел, чтобы решение было инструментом командной строки, поэтому я могу использовать его в пакетном скрипте для ускорения тестирования.

BITS 16 

start: 
    mov ax, 07C0h  ; Set up 4K stack space after this bootloader 
    add ax, 288  ; (4096 + 512)/16 bytes per paragraph 
    mov ss, ax 
    mov sp, 4096 

    mov ax, 07C0h  ; Set data segment to where we're loaded 
    mov ds, ax 


    mov si, text_string ; Put string position into SI 
    call print_string ; Call our string-printing routine 

    jmp $   ; Jump here - infinite loop! 


    text_string db 'This is my cool new OS!', 0 


print_string:   ; Routine: output string in SI to screen 
    mov ah, 0Eh  ; int 10h 'print char' function 

.repeat: 
    lodsb   ; Get character from string 
    cmp al, 0 
    je .done  ; If char is zero, end of string 
    int 10h   ; Otherwise, print it 
    jmp .repeat 

.done: 
    ret 


    times 510-($-$$) db 0 ; Pad remainder of boot sector with 0s 
    dw 0xAA55  ; The standard PC boot signature 
+0

Просто предложение. Но в большинстве примеров, подобных этому, команда «cli» сразу после метки начала отключает маскируемые внешние прерывания. Возможно, вы захотите сделать то же самое. – teddy

+0

Хотя я укажу, что, поскольку вы выполняете бесконечный цикл здесь, не нужно использовать инструкцию «cli». Эта инструкция чаще всего используется в качестве инструмента синхронизации процессора, чтобы избежать условий гонки между драйверами и ядром. Он также обычно используется для остановки системы при использовании в сочетании с инструкцией «hlt». Используя «cli», тогда «hlt» обычно является предпочтительным методом преднамеренной остановки системы по сравнению с бесконечным циклом, как вы использовали. – teddy

ответ

8

Вы можете использовать dd (поиск dd для окон), чтобы создать дискету для стартеров. Бинарный файл просто записывается в первые 256 байтов файла 1440 kib.

dd if=/dev/zero of=floppy.img ibs=1k count=1440 
dd if=boot.img of=floppy.img conv=notrunc 

И здесь мы идем:

+0

Я попробую. – hddh

+0

копия: Есть ли способ сделать это с помощью C? Я могу сделать это с NASM, но я думаю, что я хотел бы начать с C, а затем спуститься вниз. – tekknolagi

+0

@tekknolagi Вам необходимо настроить свой компилятор для вывода плоского двоичного кода из 16-битного кода. Это [возможно] (https://stackoverflow.com/questions/9692787/compiling-c-for-8086), но не рекомендуется. Лучше всего написать ваш [загрузчик] (http://wiki.osdev.org/Bootloader) в сборке и переключиться на C позже или использовать [существующий загрузчик] (http://wiki.osdev.org/Category : Загрузчики). – copy