ďťż

Ładny brzuch

Witam wszystkich, to mój pierwszy post na tym forum.

Pisze system operacyjny w asemblerze i pascalu. Kod bootloadera już napisalem, działa i chcę napisać kernela w pascalu. System ma być w trybie rzeczywistym i nie mam kompilatora, którym mógłbym to skompilować (tp używa przerwań dosa więc odpada, fpc kompiluje dla pmode). Zna ktoś taki kompilator? I do tego (jeśli będzie w czym wybierać) to najlepiej jeśli formatem wyjściowym było by flat binary. I jeszcze jedno. Czym w skrócie różnią się formaty coff, efl i inne?



hmm.. Spróbuj może najpierw napisać coś na kształt systemu, bo taki system z prawdziwego zdarzenia to sporo roboty. Ale jeśli już bardzo chcesz to podziel system na moduły systemu, a te zagreguj w większe lub podziel na mniejsze jednostki. Dobrze to najpierw zaplanuj, zrób jakąś dokumentację żebyś potem nie zabłądził w tym co chcesz robić, a programowanie zostaw na koniec.
Mam taką propozycję - spróbuj może na początek napisać własne jądro systemu zmieniając jądro systemu jakiejś dystrybucji linuxa.

Jeśli chodzi o kompilator (w topicu jest że chcesz wykorzystać assemblera) to albo używaj nasm'a, albo Delphi i wstawki assemblerowe.

Ale najpierw poczytaj w necie o projektowaniu i implementacji systemów operacyjnych. ;)

Pozdro

Hmm... Delphi to chyba nie przejdzie do pisania natywnego kodu OSa :)

Mnie się bardzo podobało podejście Agent_J (taki Warsztatowicz) przy pisaniu swojego SenseOS - napisał (chyba w ASM) podstawowy kernel, na którym osadził GCC; reszta jechała w C, a z racji kompatybilności z POSIX to potem tylko kompilował toolsy unixowe ze źródeł i już był shell i różne przydatne narzędzia ;)

//EDIT
OT: dowhilebegin, podoba mi się Twój podpis :)
Użytkownik TeMPOraL edytował ten post 06 październik 2006, 17:53
Ekspresowe odpowiedzi, jestem zaskoczony (mile oczywiście ;))

System ma być tylko w trybie tekstowym, może jakieś logo w 13h. A coś na kształt systemu napisałem w czystym asm pod nasmem i działało :) (pod boschem testowalem, wyświetlało tekst i wprowadzało procesor w nieskończoną pętle). No ale nie zabardzo znam asembler, i przy większym projekcie był by problem. Dlatego potrzebuje coś kompilującego pascala bez użycia przerwań dosa. System ma służyć jako prosty bootloader dla dowolnego systemu (coś jak grub na dyskietce, praca na 6 z systemów operacyjnych w II klasie technikum informatycznego). Jak nic nie będzie to napisze w C (chociaż nie bardzo znam, to i tak więcej niż asma).



Mógłbyś przykładowo napisać sobie kompilator Pascala, który robiłby tzw. cross-kompilację (albo jakoś przerobić Pascala z GCC na cross-compilera) - czyli kompilowałby do takich instrukcji ASM, które Ty określasz (na przykład bez przerwań DOSa). Możesz tez po prostu samemu napisać biblioteki I/O i inne, implementując je bezpośrednio w ASM, a następnie kompilować program w Pascalu tylko z nimi - żeby nie używał przerwań systemu operacyjnego, na który kompilujesz (tak czy siak to też musisz zrobić przy podejściu z cross-kompilacją).

Ale to wszystko to jest bardzo dużo roboty (ja w temacie C++ bym się jej nie podjął ;) ). W Twojej sytuacji to podszlifowałbym ASM i zagłębiłbym się w tematyke pisania OSów - jak będziesz miał więcej informacji, to szybciej dojdziesz do sensownych wniosków jak i czy w ogóle ruszyć ten projekt.

Pozdrawiam,
TeMPOraL.

Nie ma takiego kompilatora o jakim mówisz. Zresztą nie ma języka w którym pisałbyś sobie print "xxxx" i by Ci wywalało na ekranie coś. W Pascalu i tak musiałbyś takie procedury sam pisać, które miałyby postać:

procedure xxx
begin
asm

end
end.

Nie wiem czy zgodnie z składnią pascala napisałem bo już nie pamiętam tego języka, ale idea chyba jest jasna. Naucz się albo C albo jedź w asemblerze. System w r-mode jest banalny do napisania.

Oh, wiem o tym, że musiałbym wszystko napisać od podstaw. A takie kompilatory znalazłem (nie dla pascala oczywiście), chociażby gcc przy odpowiednich opcjach tworzy takie pliki, o które mi chodzi. A procedury nie będą dla mnie problemem.
Chyba rzeczywiście napisze cały w asmie.
Użytkownik kwarzecha7 edytował ten post 07 październik 2006, 13:08
jak dla mnie najwygodniej pisze sie osa w C (gcc) i asmie (albo gas albo nasm). Od asm'a trzymam sie jak najdalej bo jest dosc trudny w debugowaniu i ogolnie w projektowaniu/pisaniu. Polecam tez stronke http://www.osdever.net/ tam z tutkow mozna dosc duzo wyczytac. Jezeli chodzi o RM... to to jest banał (o ile ma nie byc rozbudowany), rob w asmie & KISS :).
Użytkownik icek edytował ten post 08 październik 2006, 14:07
Narazie pisze w NASMie. Jak nie zdobęde kompilatora do pascala (chyba nie znajde takiego) to będe dalej tylko w nim pisał system. Thx za stronke.


Narazie pisze w NASMie. Jak nie zdobęde kompilatora do pascala (chyba nie znajde takiego) to będe dalej tylko w nim pisał system. Thx za stronke.
O OS'ach jest co nieco na 4p. Co prawda jest tam tylko ASM + C, ale przyjemnie napisane :).

No właśnie z 4p pomysł. A ostatnio stronka nie działa. Jakieś problemy z serwerem.
Użytkownik kwarzecha7 edytował ten post 10 październik 2006, 17:59
Do pisania osa rzadzi Fasm. Ogromnym atutem jest mozliwosc mieszania kodu 16 bitowego i 32 bitowego w jednym pliku zrodlowym, no i mozliwosc zdefiniowania wlasnego formatu pliku wykonywalnego przy pomocy makr.

Co do kompilatora - na pewno jest jakis 16 bitowy kompilator pascala open source - starczy mala zmiana w zrodle (np sposob zarzadzania podstawowymi funkcjami) i juz. A moze nawet to nie bedzie potrzebne, moze starczy zmiana funkcji w plikach include (to sie chyba uses w pascalu nazywa ;p).

Btw-real mode nie ma sensu. Ok, mozna sie troche nauczyc, ale mozliwosci (przerwania itd) sa dokladnie takie same jak w dosie. Jesli chcesz pobawic sie wlasnym shellem itd, zrob to jako .com, a pozniej 'przejmij kontrole' nad pamiecia i rob co chcesz. Opakowywanie to w system to imho strata czasu-pobawisz sie troche, dojdziesz do momentu w ktorym projekt cie znudzil, a zrodla nie beda mialy praktycznie zadnego innego uzycia.

Prawdziwa zabawa zaczyna sie w pmode, jest troche trudniej, ale droga do oswiecenia jest wyboista ;>

Ale nie wiem po cholerę kompilator pascala do tego. Proste write z pascala w asemblerze to jest kilka linijek kodu. Jaka różnica czy będziesz pisał mov si,tekst||call write czy write ("tekst jakis")?

A tak btw to autor napisał "System ma służyć jako prosty bootloader dla dowolnego systemu". Więc pracować w r-mode na pewno musi i tutaj tylko asembler. I musisz napisać obsługę kilku systemów plików [windowsowe, linuksowe], detekcję RAM'u, odblokowanie A20, przejście w PM. Bootloader zazwyczaj piszę, gdy ma się już wiedzę na temat programowania sprzętu. Na żywca nie napiszesz.

Pod pojęciem prosty bootloader rozumiem coś takiego:
1. Odpalam komputer z dyskietki z moim bootloaderem, bootloader laduje prostego kernela pod 0000:1000
2. Wybieram napęd cd/partycje na dysku (partycje albo dysk - jeszcze nie wiem jak to jest tam fizycznie pozapisywane) i ładuje bootsector z tego dysku/napędu cd pod 0000:7c00
3. Oddaje kontrole pod ten zaladowany bootsector

W sumie to ma to działać tak jak analogiczna funkja biosu. Po co? Żeby się nauczyć. A pascal, bo jak bym kiedyś chciał coś więcej dopisać, to by było łatwiej (za rok będe miał w szkole C++ 3 razy w tygodniu, więc chyba z systemem w czymś więcej niż asm poczekam).


Pod pojęciem prosty bootloader rozumiem coś takiego:
1. Odpalam komputer z dyskietki z moim bootloaderem, bootloader laduje prostego kernela pod 0000:1000
2. Wybieram napęd cd/partycje na dysku (partycje albo dysk - jeszcze nie wiem jak to jest tam fizycznie pozapisywane) i ładuje bootsector z tego dysku/napędu cd pod 0000:7c00
3. Oddaje kontrole pod ten zaladowany bootsector

W sumie to ma to działać tak jak analogiczna funkja biosu. Po co? Żeby się nauczyć. A pascal, bo jak bym kiedyś chciał coś więcej dopisać, to by było łatwiej (za rok będe miał w szkole C++ 3 razy w tygodniu, więc chyba z systemem w czymś więcej niż asm poczekam).


Jeżeli stosujesz pojęcia to używaj ich w takim znaczeniu jakie one naprawdę mają. Bootloader służy do załadowania systemu operacyjnego. Sorry ale z tego co rozumiem co Ty piszesz to znasz pascala i chcesz w nim napisać system bo Ci w nim łatwiej. Więc jeżeli chcesz się uczyć to zacznij asemblera. Jest to najprostszy język na świecie.


Jeżeli stosujesz pojęcia to używaj ich w takim znaczeniu jakie one naprawdę mają. Bootloader służy do załadowania systemu operacyjnego.

Masz racje. Będzie to "coś" uruchamianego przed systemem. Powinienem napisać chyba tak: "Pod pojęciem prosty system rozumiem coś takiego"


Sorry ale z tego co rozumiem co Ty piszesz to znasz pascala i chcesz w nim napisać system bo Ci w nim łatwiej. Więc jeżeli chcesz się uczyć to zacznij asemblera. Jest to najprostszy język na świecie.

Pascala znam, można powiedzieć, że bardzo dobrze (zawsze jednak znajdzie się ktoś, kto mi udowodni, że nie znam go w ogóle :P ). Assebmlera znam tak średnio.

Chyba mnie przekonaliście, że nie opłaca się pisać w rmode i pascalu. Napisze w asmie. Jak go skończe to dam do działu Pole do popisu. Dzięki za odpowiedzi, temat można zamknąć.


Napisze w asmie. Jak go skończe to dam do działu Pole do popisu. Dzięki za odpowiedzi, temat można zamknąć.

Przypomniało mi się jeszcze coś być może ważnego dla Ciebie: w numerze "Elektroniki dla Wszystkich" - dokładnie numer: 10/2006 (a więc na czasie) jest opis bootloader'a w C i w Assemblerze.
Sprawdź stronkę: ELEKTRONIKA DLA WSZYSTKICH

Pozdro!

//Edit1: To nie jest opis bezpośrednio pod procesor Intel'a ale w połączeniu z książką "Anatomia PC" powinieneś dać radę.
Użytkownik dowhilebegin edytował ten post 12 październik 2006, 00:04
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •