Cyjon OS

Odpowiedz Nowy wątek
2015-04-10 20:41
56

Programowanie może być ciekawe.

W pełni 64 bitowe jądro systemu jak i oprogramowanie oraz system plików.
W języku asemblera.

Wszystkie programy pisane własnoręcznie, nie są przenoszone z systemów GNU/Linux (tylko na nich wzorowane - wizualnie :)).

user image

Edytor tekstu "nano":

user image

Aby daleko nie szukać, poniżej paczka z obrazem systemu.

Aktualizacja 21.12.2015:

user image

Aktualizacja 3.1.2016:

user image
user image

Aktualizacja 5.1.2016:
Wykonałem trochę modyfikacji i teraz działa znacznie lepiej (znalazłem parę błędów) jak i się prezentuje.

user image

Aktualizacja 27.05.2016:
Obsługa protokołu ARP, IP i ICMP !

user image

Aktualizacja 11.06.2016:

Udało mi się nawiązać połączenie przez przeglądarkę, "stos" tcp/ip przyjmuje tylko jedno połączenie ;)
Teraz muszę wysłać dane do serwera httpd wraz z identyfikatorem połączenia.
Serwer wyśle odpowiedź do klienta(przeglądarka) i demon_tcp zakończy połączenie, oczekując na następne xD
user image

Aktualizacja 30.06.2016:

Udało się, mam serwer WWW, stos TCP/IP i system operacyjny... a wszystko w asemberze :D
user image

Aktualizacja 28.12.2016:

Niewiele zmieniło się z zew. punktu widzenia, ale pod maską jest już pełna obsługa wirtualnych konsol!
Powłoka otrzymała możliwość buszowania po systemie plików (w tym i każdy inny proces).
title

Aktualizacja 15.01.2017:

title
title
title

Aktualizacja 20.02.2017:

title

Aktualizacja 22.02.2017:

Aktualizacja 21.03.2017:

title

Aktualizacja 23.03.2017:

Aktualizacja 02.07.2017:

title

Aktualizacja 25.08.2017:

title

edytowany 21x, ostatnio: Akasei, 2019-06-23 19:37
Unikałbym stosowania istniejących nazw własnych programów. Tak tylko piszę. Ogólnie bardzo fajnie. :) - Tacet 2015-04-11 00:24
Tak, zgadzam się... dopóki się z tym nie panoszę na lewo i prawo, mogę je stosować. Nazwy te zastosowałem by osoby postronne szybko się odnalazły. - Akasei 2015-04-11 00:34
Powoli przepisuję "uproszczony" kod jądra systemu do GitHub, dodając masę komentarzy. - Akasei 2015-04-11 18:00
Plik system.zip powyżej, nieaktualny. Najnowszą wersję zawsze można pobrać z GitHub. - Akasei 2015-12-21 07:15
GitHub nieaktualny, najnowszej wersji nie można nigdzie pobrać. Do czasu otrzymania satysfakcjonującego kodu. - Akasei 2017-08-25 14:34

Pozostało 580 znaków

2017-07-10 22:43
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
edytowany 4x, ostatnio: Azarien, 2017-07-10 22:52
@Azarien: problem jest coraz cięższy do zlokalizowania, bo instrukcja po instrukcji idzie gładko, to wymaga medytacji :P ale znajdę! - Akasei 2017-07-11 09:48
gdzieś masz UB :-) - Azarien 2017-07-11 10:01
@Azarien: rozwiń proszę nieznany mi skrót :) - Akasei 2017-07-11 10:05
undefined behavior, coś czego w asmie teoretycznie nie ma... - Azarien 2017-07-11 10:07

Pozostało 580 znaków

2017-07-12 15:12
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".

Race condition? - EntityPamerano 2017-07-12 15:21
Problem rozgromiony. Teraz muszę przystopować i wrócić do Rize (WM), bochs nie wyrabia z rysowaniem - już przy dwóch oknach działa ślamazarnie. - Akasei 2017-07-13 16:05
Jestem wręcz pewien, że uzyskam płynność większą niż Kolibri i Menuet (biorąc za wyznacznik Qemu). - Akasei 2017-07-13 16:06

Pozostało 580 znaków

2017-07-18 11:24
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

edytowany 2x, ostatnio: Akasei, 2017-07-18 11:25

Pozostało 580 znaków

2017-08-10 13:20
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.

edytowany 2x, ostatnio: Akasei, 2019-06-23 19:54
Jesteś bogiem asemblera. Kłaniam się nisko... - jpacanowski 2017-08-15 21:15
No elegancko to wygląda. Szacun - NeuroXiq 2017-08-21 19:01

Pozostało 580 znaków

2017-08-21 19:37
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
@Adam Boduch: Poprawcie stylistyke dla kodu w ASM ;) np. szerokość tabulatorów 8 znaków. https://wataha.net/shot/asm.png - Akasei 2017-08-21 19:38

Pozostało 580 znaków

2017-08-22 01:07
0

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

[email protected]:/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

Pozostało 580 znaków

2017-10-16 19:37
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... ;(

2017-10-18 09:34
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.

Pozostało 580 znaków

2018-02-14 16:33
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?

edytowany 3x, ostatnio: Akasei, 2019-06-16 19:32
Pokaż pozostałe 7 komentarzy
@okmanek Ja tylko żartowałem... każdy ma prawo do krytyki czy napisania co uważa... :P - jpacanowski 2018-02-17 14:54
@akasei Gdzie można obserwować różne decyzje w implementacji systemu i ew. mieć na to jakiś mały wpływ? :P Czy Slacka nadal może używasz? Popisałbym coś w ASM pod twój system po stronie userlandu... :P - jpacanowski 2018-02-17 14:55
@akasei Czy możesz pokazać kod jakiejś mniejszej aplikacji w ASM pod Linuksa żebym mógł zobaczyć jak się pod Linuksa pisze w ASM? Kiedyś na Githubie miałeś jakiś prosty serwer HTTP w ASM pod Linuksa... szkoda, że usunąłeś... - jpacanowski 2018-02-17 14:57
@jpacanowski: to nie był serwer HTTP w ASM pod Linuksa tylko pod Cyjona ;) i dalej go mam, zapieczętowany. - Akasei 2018-03-10 23:41

Pozostało 580 znaków

2019-06-23 20:02
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...

edytowany 10x, ostatnio: jpacanowski, 2019-06-23 20:16
PS: Nie sądziłem że modyfikacja wiadomości wygeneruje wyjątek, przepraszam wszystkich za zamieszanie. - Akasei 2019-06-23 20:47

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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