Cyjon OS

4

Zmiany na lepsze:

  • przeciąganie okien poza ekran, aż do widoczności tylko 1 piksela,
  • zlikwidowano błąd "puszczania" okna gdy za szybko poruszano kursorem
  • zlikwidowano błąd innych rozdzielczości niż 800x600 w GRUBie, zarazem nie będzie tapety (czarne tło) bark skalowania obrazów (jeszcze).

PS: teraz szukam algotrymu skalowania obrazów :)

0

Coś się dzieje w temacie?:) Bo śledziłem z zapartym tchem :)

0

Nie posiadam tyle czasu przerobowego, teraz nadmiar pracy w robocie. Od czerwca ruszam dalej.

title

1

Mogę już dodawać parę etykiet na raz w jednym oknie :) Cokolwiek wyjdzie poza obszar etykiety lub okna jest ignorowane (niedrukowalne).

etykiety

0

Świetnie, nadziałem się na własną minę :D w konfiguracji kontrolera PIT. Kod jądra systemu przeszedł znaczące zmiany w optymalizacji kodu, przez swoją nieuwagę - nie zwróciłem uwagi na zawartość rejestru RDX przez co zwolniłem procka do ~15 przełączeń zadań na 1s. Zmarnowane 2 godziny na wyrywaniu włosów.

Btw. Rize wymaga ulepszenia, dlatego jak znajdę czas na implementacje tego http://www.trackze.ro/wsbe-5-be-clipped/, sterowniki prawie nie będą potrzebne.

W tym momencie bawię się ikonami ;)

4

Wystarczył dzień roboczy by uzyskać możliwość wyświetlania ikon!

title

Teraz obsługa zdarzeń :) kliknięcie i otworzenie aplikacji, pierwszą będzie... a jak, konsola.

3

Przywrócono odczyt zawartości plików do przestrzeni procesów. Proces console interpretuje już zawartość urzadzenia znakowego /dev/console/0.

Czas przepisać powłokę shell i uruchomić ją kierując standardowe wyjście na /dev/console/0

title

PS: poproszę o strukturę najprostszego formatu/kontenera video :)

0

Stoję teraz przed trudnym zadaniem logistycznym, jak zezwolić powłoce (proces shell) na dostęp do bufora :)

title

Dostęp do bufora klawiatury powinno mieć okno, które jest aktywne, ale w tym momencie każdy proces wywołujący żądanie otrzyma klawisz z bufora.

Jeśli ktoś ma pojęcie, w jaki sposób to działa w Xorg - proszę o przywołanie.

PS:

bash-4.3# ./count.sh 
Rozmiar kodu źródłowego bez komentarzy i pustych linii: 5037
Całość: 10149
bash-4.3# ls -lh build/kernel 
-rw-r--r-- 1 root root 32K lip  5 12:56 build/kernel

Wszystkie liblioteki i czcionki, przeniesione zostaną do przestrzeni wspólnej, zaoszczędzi się trochę KiB (programy będą lżejsze).

PS2:

13:15 < milyges> jak w uniksie, przez wirtualne urządzenie konsoli
13:15 < milyges> shell chodzi na konsoli wirtualnej, a dane z klawiatury przesyła do niej okno konsoli
13:25 -!- jpacanowski [~[email protected]] has joined #osdev.pl
13:28 -!- jpacanowski [~[email protected]] has quit [Client Quit]
13:59 <+akasei> milyges: aktualnie mam tak, rize(odpowiednik X) odpala proces console, proces console tworzy urządzenie znakowe /dev/console/X i uruchamia
proces shell informując go że standardowe wyjście jest na /dev/console/X, następnie proces console interpretuje wszystko co znajdzie się w
/dev/console/X i wyświetla w swoim oknie
14:00 <+akasei> to by znaczyło że proces console musi utworzyc jeszcze jedno urządzenie (typu klawiatura) i przekazać je do procesu shell z informacją stąd
pobieraj sobie klawisze
14:01 <+akasei> dobrze kumam?
14:02 <+akasei> zatem proces console będzie pobierał klawisze z bufora klawiatury gdy będzie miał takie prawo (będzie aktywnym oknem) i zapisywął je do
urządzenia typu klawiatura ?
14:02 <+akasei> to się da zrobić :)

0

Popełniłem coś lepszego w tym momencie :)

0

Gotowe, zaimplementowałem obsługę FIFO dla procesów i łączę ją z klawiaturą.

@babubabu program jest rewelacyjny, ten krótki materiał zajmuje 700 KiB....

1

Więc tak... zawiodłem się na instrukcji procesora :D

Najpierw:
title

Zatem, jeśli nie jestem po prostu zmęczony to znalazłem błąd w działaniu instrukcji btr.
Na zrzucie widać, że pobrałem najmłodszy ustawiony bit z zespołu komórek w qword [rsi] i jego numer załadowałem do akumulatora oraz wykonałem reset bitu nr 11 (numer w rejestrze rax) w komórce pamięci pod adresem 0x10B0A8. Do tej pory działało poprawnie, jak widać po wcześniejszych Bajtach w pamięci.

Ale! Teraz instrukcja btr zachowała tylko znak bitu w fladze CF i zostawiła bit nadal ustawiony w komórce pamięci :(

Może coś przeoczyłem... więc idę się przespać.

BTW: procedura wykonująca tą operację jest jedną z głównych (pobiera wolną stronę z binarnej mapy pamięci...)

0

A możesz do tej komórki normalnie pisać? mov w tym samym miejscu działa poprawnie?

co jeśli kod przepiszesz bez użycia btr, np.

; nie sprawdzane
bsf rcx, qword ptr ds:[rsi]
mov eax, 1
shl rax, cl
not rax
and qword ptr ds:[rsi], rax
0

Znalazłem problem... losowe dwa procesy, konkurowały ze sobą przy wywoływaniu procedury pobierającej wolną stronę.
Nie wiem jak to się zwie w dziedzinie programowania (zapomniałem), ale ja to zwę "Wyścigiem Szczurów".

0

Jestem zajęty usprawnianiem rysowania okien, tła i kursora.

W między czasie, może ktoś zechce napisać mały generator tapety :) ?

Można korzystać z zmiennych 64 bitowych:

variable_video_mode_graphics_size_in_bytes
variable_video_mode_graphics_width_in_pixels
variable_video_mode_graphics_height_in_pixels
variable_video_mode_graphics_width_in_bytes

Format koloru piksela to 0xFFrrggbb

Rejestr RDI jest już ustawiony na początku przestrzeni tła.

Przykładowy generator dla siatki dwukolorowej:

	;-----------------------------------------------------------------------
	; wypełnij przestrzeń tła generatorem

	; kolory pikseli
	mov	rax,	0xFF272727FF101010

	; zachowaj wskaźnik początku aktualnego wiersza
	mov	rbx,	rdi

	; ilość wierszy
	mov	rdx,	qword [variable_video_mode_graphics_height_in_pixels]

.restart:
	; ilość kolumn przypadających na wiersz
	mov	rcx,	qword [variable_video_mode_graphics_width_in_pixels]
	shr	rcx,	STATIC_DIVIDE_BY_2

.generate:
	; wyświetl parę pikseli
	stosq
	loop	.generate

	; para pikseli z początku poprzedniego wiersza jest różna?
	cmp	qword [rbx],	rax
	jne	.ok	; tak

	; zamień kolory miejscami
	rol	rax,	STATIC_REPLACE_EAX_WITH_HIGH

.ok:
	; zachowaj wskaźnik początku aktualnego wiersza
	mov	rbx,	rdi

	; pozostały inne wiersze?
	dec	rdx
	jnz	.restart

title

7

Aby nie było, że nic nie robię ;)

title

  • nowy system wyświetlania okien, na podstawie TRACK_ZERO, ale znacznie upleszony (zmieniłem logikę działania oraz wywaliłem rysowanie zbędnych przestrzeni [bo zmieniłem logikę? ;]) (tak, napisany w asemblerze :D),
  • aplikacja może ustawić własny nagłówek okna,
  • dodano przyciski "minimalizuj" i "zamknij" (choć jeszcze nie są podpięte pod nie akcje),

Aktualnie likwiduję wszystkie problemy przy uruchamianiu aplikacji dla niewystarczającej ilości wolnego RAMu.
Gdy skończę - przygotuję taskbar i podepnę akcje pod przyciski, zarazem udostępnię podręczne menu "ala" Openbox/Fluxbox.

0

Taskbar i menu musi poczekać... prawie skończyłem IPC jest to niezbędne by procesy mogły się komunikować między sobą.

Tak dla przykładu wygląda prosta komunikacja:

	; zapytaj o PID rodzica
	mov	ax,	STATIC_SERVICE_PROCESS_PARENT_PID
	int	STATIC_IRQ_SERVICE

	; zachowaj 
	mov	qword [parent_pid],	rbx

	; wyślij polecenie do rodzica "przedstaw się"
	mov	ax,	STATIC_SERVICE_IPC_REQUEST
	; rejestr RBX zawiera identyfikator odpytywanego procesu, rejestr RCX jest pusty (wysyłamy echo, brak danych)
	int	STATIC_IRQ_SERVICE

.wait:
	; otrzymano odpowiedź?
	mov	ax,	STATIC_SERVICE_IPC_CHECK
	mov	rdi,	end	; odpowiedź załaduj na koniec programu
	int	STATIC_IRQ_SERVICE
	jc	.wait	; nie, czekaj

	; odpowiedź od pytanego procesu?
	cmp	qword [rdi + KERNEL_STRUCTURE_IPC.from],	rbx
	jne	.wait	; zingoruj i czekaj na konkretną odpowiedź

	; rodzicem jest terminal/konsola identyfikująca się jako VT100?
	mov	rcx,	parent_identify_end - parent_identify
	mov	rsi,	parent_identify
	add	rdi,	KERNEL_STRUCTURE_IPC.data
	call	liblary_string_compare
	jc	.end	; nie, zakończ proces powłoki
0

Mogę już startować w kategorii najmniejszy "Hello, World!"

root@ga-m68mt-d3:/home/akasei/CyjonOS# ls -l build/
razem 4
-rw-r--r-- 1 root root 30 sie 22 01:02 hello

Kod źródłowy dostępny pod adresem CyjonOS at GitHub

0

Co słychać odnośnie systemu? :)

Czy ma ktoś gdzieś zapisaną stronę z tym tutorialem jak stworzyć GUI? http://www.trackze.ro/
Bardzo mi na tej treści zależy... ;(

2

@jpacanowski: bardzo ciężki temat to GUI, na razie wszystko przemyślałem co potrzebuje i czekam, aż podświadomość wygeneruje mi rozwiązanie.

0

Witam poniewczasie od ostatniego postu.

Zanim opiszę problem, mała informacja: http://github.com/Blackden/ udostępniam z ppowrotem kod źródłowy Cyjona (gałąź: reborn), ale już na licencji GPL 3.0.

Problem: w tym momencie przepisuję podstawową obsługę pakietów przychodzących na interfejs sieciowy i nie mam pojęcia w jaki sposób obsłużyć poszczególne ramki pakietu.

W jednym procesie czy każdą ramkę do osobnego procesu (demona)?

Przykładowo ramkę Ethernet mógłbym obsłużyć wraz z ramką ARP (pytanie-odpowiedź), gdyż nie wymaga to dużych zasobów obliczeniowych

lub IP z ICMP.

Co z innymi?

0

Kurna, człowieku... Non-stop od paru dni dostaję na skrzynkę spam (powiadomienia), że coś edytujesz w tym topicu. Gdy wchodzę za każdym razem na edytowany post, to brakuje w nim zdjęć, oraz zawiera zmienione adresy URL, które nie działają. Widzę też, że nie możesz się zdecydować na nick, raz Akasei, a raz Blackden i tak skaczesz w kółko... pousuwałeś też zdjęcia w każdym poście (a właściwie poprawne URLe do nich)... oraz pozamieniałeś URL na inny, który oczywiście nie działa, tak jak od ponad roku link do strony Cyjon OSa, której nigdy nie było - ale link podany do niej oczywiście jest... Nie prościej usunąć ten cały topic, skoro sam nie wiesz czego chcesz? A co w temacie OSa? Bo też raz jest na Githubie repo systemu, aby za chwilę zniknęło i tak dobre kilka razy było...

tu masz stare programy https://github.com/Blackden/

Otóż to...

0

Zmieniam domenę, zatem muszę zaaktualizować wskaźniki. Nick - mój błąd.

W sprawie Cyjona, w tym roku wystawię aktualizację.

8

Pssst....

Cyjon w0.1283

0

Hej, bardzo ciekawy projekt. Ale dlaczego tylko jedna gwiazdka na GH??? Ja dałem stara od siebie ale wydaje mi się że powinieneś to bardziej promować, spox system i dobra robota!

Mam pytanie: dlaczego wszystko jest w asemblerze? Nie lepiej było użyć C dla większości kodu? Wydaje się że nawet własnoręcznie wykonany język programowania byłby bardziej wygodny w użyciu niż ASM...

0
Akasei napisał(a):

Pssst....

Cyjon w0.1283

całkiem elegancko to wygląda jak na pusty system z konsolą. Ile w sumie godzin już to zajęło?

1

Nie wiem gdzie zaglądałeś na repozytorium, ale tu jest aktualne https://github.com/Blackend/Cyjon

Nie widzę sensu promować 😉 to jest projekt 4Fun.
Dlaczego ASM? Wygodniej dla mnie, nie każdy musi się z tym zgadzać 😉

0xmarcin napisał(a):

Hej, bardzo ciekawy projekt. Ale dlaczego tylko jedna gwiazdka na GH??? Ja dałem stara od siebie ale wydaje mi się że powinieneś to bardziej promować, spox system i dobra robota!

Mam pytanie: dlaczego wszystko jest w asemblerze? Nie lepiej było użyć C dla większości kodu? Wydaje się że nawet własnoręcznie wykonany język programowania byłby bardziej wygodny w użyciu niż ASM...

2

Spełnianie oczekiwań użytkowników mnie nie bawi. Czasami ludzie nie zdają sobie sprawy ile ciężkiej pracy jest w implementacji rzeczy, które oczekują widzieć. Nie przeliczam czasu na godziny tylko satysfakcję z osiągniętego rezultatu 😉

Nawet nie liczę, że ktoś przyłączy się do pisania (co jest nie ukrywam, mi na rękę) przez co mam pełną kontrolę nad kodem.

Można powiedzieć, że jestem dumny z menedżera okien, który działa o niebo lepiej/płynniej od projektów, które nigdy nie dogonię pod względem możliwości tj. Kolibi czy Menuet. Za to mój kod będzie dopieszczony pod względem wydajnosci i rozmiaru.

PS: Nikt nie zwrócił uwagi na wydajność rysowania/przemieszczania okien 😅

obscurity napisał(a):
Akasei napisał(a):

Pssst....

Cyjon w0.1283

całkiem elegancko to wygląda jak na pusty system z konsolą. Ile w sumie godzin już to zajęło?

0

Akasei!
Kope lat!
Ja tu widze, że nieźle się rozpędziłeś!

8

Aktualny podgląd

0

Kiedyś czytałem na jakiejś anglojęzycznej stronie, że jak ludzie zastąpią wszystkie języki skryptowe i te korzystające z maszyn wirtualnych typu JVM, CLR językami kompilowanymi typu C/C++, Rust to roczne zużycie energii na świecie może spaść o jakieś 75%. Ale co będzie jak sztuczna inteligencja będzie mogła wszystko napisać i przepisać do asemblera? W porównaniu do C to jeszcze bardziej obniży koszty energetyczne?

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