[OSDev]Problem z zegarkiem

0

Witam!
Chciałem stworzyć sobie prostego kernela z zegarem, który pobierał by czas z biosu. Napisałem procedurkę:

mov AH,02h
  int 1H
  mov h,ch
  mov m,cl
  mov s,dh

Gdzie h, m i s to zmienne byte. Kompilator nie wywala żadnych błędów, ale gdy uruchamiam OS na Virtual PC 2004 wywala błąd: An unrecoverable processor error has been encountered. Na realnym kompie to samo Grub wczytuje kernela i od razu reset. Bez tej procedurki wszystko działa normalnie, ale zależy mi na niej. Jeśli ktoś by mógł mi pomóc to z góry dziękuję.

0

Nie wiem jakiego asemblera używasz, ale np w TASM, lub NASM wartość zmiennym przypisuje się tak:

MOV [VAR], val

0

GRUB laduje jajko 32 bitowe a z tego trybu nie ma dostepu do przerwan biosu.

0

Wolverine, a są jakies inne przerywania dotyczące czasu? Szukałem, ale były tylko odnośniki do tych biosowych.

0

Czas można pobrać z RTC przez porty IO. NIe trzeba używać przerwań. Opis portów tutaj: http://binboy.sphere.pl/index.php?show=serwis&d=asm&s=acmos.htm

0

Wielkie dzięki! Mam jeszcze jedną prośbę. Mam taki kod:

  MOV AL,04H ; pobieranie godziny w formacie bcd
  OUT 70H,AL
  IN AL,71H
  
  MOV BL,AL ; zamiana bcd
  AND BL,0FH
  ADD BL,'0'
  SHR AL,4 
  ADD AL,'0'

  MOV h,AL ; przekazanie czasu do zmiennej

Znalazłem kod na zamianę BCD, ale nie działa :( może wie ktoś czemu?
Jeszcze raz proszę o pomoc.

0

Edit, Już mam, ten kod jest ok, tylko daje kod ASCII liczby, mój błąd [wstyd]

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