[OS]Nie wiem czemu nie botuje dyskietki.

0

Mam plik o nazwie boot.asm

org 7C00h

start:
  mov ah, 2
  mov al, 10
  mov ch, 0
  mov cl, 2
  mov dh, 0
  mov bx, 0800h
  mov es, bx
  xor bx, bx
  int 13h

  jmp 0800h:0000h

times 510 - ($ - start) db 0

db 55h
db 0AAh

i plik kernel.asm

org 0000h

;ustawiamy stos
mov ax, 07C0h
mov ss, ax    ;segment stosu
mov sp, 03FEh ;wierzchołek stosu

;wybieramy tryb ekranu
xor ah, ah  ;funkcja 0
mov al, 3   ;standardowy tryb tekstowy
int 10h     ;jedziemy

;wyświetlamy komunikat
mov ax, welcome  ;wskaźnik do tekstu
mov bl, 2        ;na zielono
call write       ;wykonujemy procedurze

mov ax, name     ;wskaźnik do tekstu
mov bl, 5        ;na fioletowo
call write       ;wykonujemy procedurę

mov ax, last     ;wskaźnik do tekstu
mov bl, 2        ;na zielono
call write       ;wykonujemy procedurę

;główna petla
start:
  xor ah, ah   ;takie xorowanie jest szybsze od mov ah, 0
  int 16h      ;i w AH mamy scancode, w AL kod ASCII klawisza
  cmp al, 1Bh  ;porownaj al z 1Bh (kod ASCII klawisza ESC)
  je reset     ;jeśli równe, skocz do procedury resetowania (napiszemy później)
  jmp start    ;powracamy na początek

char:
  ;procedura wyświetla znak i przesuwa kursor
  ;wejście: al: znak, bl: atrybut

  push bx     ;kładziemy BX na stos, aby na końcu procedury go przywrócić

  mov ah, 9   ;numer funkcji wyświetlającej znak w miejscu kursora
  xor bh, bh  ;numer strony ustawiamy na 0
  mov cx, 1   ;znak wyświetlimy 1 raz
  int 10h     ;do dzieła!
 
  ;pobierz pozycje
  mov ah, 3   ;funkcja pobierania pozycji kursora
  xor bh, bh  ;numer strony (0)
  int 10h     ;odczytaj pozycje

  ;dodaj i zapisz pozycje
  add dl, 1   ;dodajemy 1 kolumnie
  mov ah, 2   ;funkcja zapisywania
  int 10h     ;zapisz pozycje
 
  pop bx      ;przywróć poprzedni stan BX
ret           ;wyjdź z podprogramu

write:
  ;procedura wyświetla tekst na ekranie
  ;wejście: ax: wskaźnik do tekstu, bl: atrybut

  mov si, ax        ;musimy użyć rejestru segmentowego aby zaadresować wskaźnik
  .next:            ;początek pętli
    mov al, [cs:si] ;zapisz do al wartość aktualnego znaku (patrz parametry dla procedury char)
    cmp al, 0       ;porównaj aktualny znak z NULL
    je end          ;jeśli są rożne, skocz do wyjścia
    call char       ;jeśli nie, wyświetl znak
    add si, 1       ;przesuń się w prawo do następnego znaku
  jmp .next         ;skocz do początku pętli
  end:              ;tutaj skoczymy, jeśli wystąpi NULL
ret                 ;wyjdź z podprogramu

reset:
  mov bx, 40h               ;używamy BX do zapisania wartości w rejestrze segmentowym
  mov ds, bx                ;BX ładuje w DS
  mov word [ds:72h], 1234h  ;ustawiamy gorący reset
  jmp 0FFFFh:0000h          ;skaczemy do FFFF:0000

;zmienne
welcome: db 'Witaj w ',0
name:    db 'Krzeslo Operating System',0
last:    db ', wciśnij ESC aby zrestartowac komputer :)',0

i zrobiłem z tych plików boot.bin i kernel.bin za pomocą winimage dyskietkę.
Jak ją "włożyłem" do MS Virtula PC to mi pisze(link do obrazka):
http://pqp24h.cba.pl/osx.PNG

Nie wiem co się dzieje...
Artykuł:
http://4programmers.net/OS_Programming/Pisanie_system%C3%B3w_operacyjnych_-_tryb_rzeczywisty

0

Łał, doszedłeś do tego stopnia zaawansowania że OS wyświetla ci:

user image

To jest bunt maszyn! Juice zahipnotyzował twojego OSa żeby reklamował jego hosting.

0

i co to ma byc

0

To co podałem wyświetla mi się jak klikam na twój link.

0

@up, nie jesteś jedyny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1