Cyjon OS

Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
62

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
Zobacz pozostały 1 komentarz
Akasei
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
Powoli przepisuję "uproszczony" kod jądra systemu do GitHub, dodając masę komentarzy.
Akasei
Plik system.zip powyżej, nieaktualny. Najnowszą wersję zawsze można pobrać z GitHub.
Akasei
GitHub nieaktualny, najnowszej wersji nie można nigdzie pobrać. Do czasu otrzymania satysfakcjonującego kodu.
matoung
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 7 lat
  • Postów:53
0

No ładnie to wygląda :)

Akasei
Piszę od stycznia 2013r, z szerokimi odstępami - nie poświęcam tyle czasu ile bym mógł.
0

Super sprawa, na pewno musiałeś poświęcić sporo czasu.
Na czym to odpalasz? Masz jakąś maszynkę wirtualną czy pod jakimś sprzętem?

0

@Akasei - z jakich materiałów korzystałeś pisząc projekt? Pisałeś w czystym asemblerze czy również w C? Uruchomiłem system na wirtualce, wszystko bangla jak trzeba :] Graty za włożony wysiłek.

Akasei
Najważniejsze informacje zostały mi łopatologicznie przedstawione na serwerach IRC, kanał #osdev.pl Tu muszę podziękować mangado http://mosesek.sourceforge.net/polski.html, za niezliczone próby wciśnięcia mi do głowy stronicowania i przełączania kontekstu. Pozostała część to własne boje z dokumentacjami.
Akasei
Pisałem, piszę i pisać będę w czystym języku asemblera.
XI
Ja też (będę)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:dzień
0

przykładowe zadania:

  • obsługa myszki (naprościej będzie PS/2)
  • grafika (podstawowe tryby VGA/VESA na początek)
  • możliwość ładowania binarek skompilowanych w C

:)

edytowany 1x, ostatnio: Azarien
0

Nie wygodniej i szybciej byłoby to pisać w C?

Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
0
Azarien napisał(a):

przykładowe zadania:

  • obsługa myszki (naprościej będzie PS/2)
  • grafika (podstawowe tryby VGA/VESA na początek)
  • możliwość ładowania binarek skompilowanych w C

:)

Mam taki zarys w głowie:

  1. wersja x <= 1.0 tylko tryb tekstowy
  2. wersja 1.0 > x <= 2.0 dodana zostanie obsługa sieci
  3. wersja 2.0 > x <= 3.0 dodana zostanie obsługa trybu graficznego (najważniejszy będzie framebuffer, by uzyskać większe możliowości dla konsoli)
KijWMrowisku napisał(a):

Nie wygodniej i szybciej byłoby to pisać w C?

Nie :) Straciłbym pare lat na nauke języka w stopniu zadowalającym.

PS: 16.04.2015
Jeśli są osoby zaznajomione z językiem asemblera, proszę: https://github.com/Blackden/
Przepisuję kod jądra systemu... powoli.

PS: 17.04.2015
Na serwerze GitHub jest już wystarczająca ilość kodu przeznaczona do kompilacji i uruchomienia jądra systemu w warunkach testowych.

PS: 17.04.2015 12:57
Sprawdziłem czy działa na prawdziwym sprzęcie, płyta główna D510MO + PENDRIVE
user image

Oczywiście to nic nie znaczy :) Bootloader nie posiada obsługi portów USB, tym zajął się BIOS.
Dodatkowo na prawdziwej maszynie po paru/kilku minutach wyskakuje informacja "Unhandled Hardware Interrupt!", co nie występuje na emulatorze. Zdawało mi się, że wyłączyłem pozostałe przerwania sprzętowe...

edytowany 8x, ostatnio: Akasei
Trebuh
Jesteś niezłym pasjonatem jeżeli piszesz coś takiego ;)
Akasei
@Trebuh: po prostu znalazłem hobby :]
JP
Nauka języka C w stopniu zadowalającym to jakiś tydzień nauki jak się uprzesz ;) Chyba najlepszy tutek w Internecie po polsku https://pl.wikibooks.org/wiki/C Oczywiście ja popieram pisanie systemu w ASM :)
Manna5
Co to znaczy Wataha.net? Jakiś adres internetowy?
Akasei
@Manna5: Miałem kiedyś domenę o tej nazwie, zrezygnowałem z niej, teraz posiadam https://blackdev.org/ i pozostanie... dobrze odzwierciedla to co robię ;)
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
akasei napisał(a):
KijWMrowisku napisał(a):

Nie wygodniej i szybciej byłoby to pisać w C?

Nie :) Straciłbym pare lat na nauke języka w stopniu zadowalającym.

Wątpię. C to bardzo prosty język, tylko trzeba się trzymać pewnych reguł.

Przeczytaj tę książkę i będziesz wiedział właściwie wszystko co potrzeba na początek:
"Język ANSI C. Programowanie.", Brian W. Kernighan, Dennis M. Ritchie

Tworzenie programowania to:

  • napisanie/dodanie kodu
  • kompilacja
  • uruchomienie
  • debugowanie (może być zastąpione przez wyświetlanie)

Dzięki C możesz ten cykl znacząco przyspieszyć. O ile chcesz zrobić coś użytecznego.

Jeśli chcesz zrobić sam wszystko od A do Z (bo np. nie pasuje Ci GNU) to możesz użyć Small C: http://en.wikipedia.org/wiki/Small-C

Musiałbyś go pewnie tylko dostosować do budowania execów x64 zgodnie z Twoimi założeniami.

Jeśli GNU to nie przeszkoda: Tiny C (LGPL): http://bellard.org/tcc/

Więcej kompilatorów: http://en.wikipedia.org/wiki/List_of_compilers#C_compilers

ASM jest dobry do wszelkich interfejsów z hardwarem, do pisania programów (czy nie daj Boże aplikacji) jest strasznym spowalniaczem (chyba że masz już bibliotekę standardową - łańcuchy, pliki, wątki, strumienie, sterta itd).

Edit: jak zrobić własny kompilator: http://www.stack.nl/~marcov/compiler.pdf

edytowany 3x, ostatnio: vpiotr
Zobacz pozostałe 2 komentarze
Azarien
@vpiotr: mimo wszystko kiedyś na tym właśnie się zaciąłem, i pisałem dalej uparcie w asemblerze, aż mi się odechciało i projekt zamarł. (a już był nawet task scheduler z wywłaszczaniem)
vpiotr
Czasem przydaje się ktoś kto da kopa, nie przeczę. Albo chociaż zapyta jak idzie.
Akasei
@vpiotr: Jak idzie? :)
vpiotr
@Akasei: w jakim sensie?
Akasei
Echo do 4 komentarza ;)
Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
0
vpiotr napisał(a):

Edit: jak zrobić własny kompilator: http://www.stack.nl/~marcov/compiler.pdf

Dziękuje za dokument. Na pewno wyciągnę z niego interesujące informacje przy tworzeniu własnego kompilatora w języku asemblera.

Raczej podziękuję za propozycje wykorzystania języków wysokiego poziomu. Lubię porozmawiać z procesorem i sprzętem po swojemu ;) Projekt zapewne nie będzie znany w świecie. Piszę dla własnej przyjemności.

PS: Z chęcią przygarnę dokumentacje na potrzeby tworzenia kompilatora dla języka asemblera.

vpiotr
To jest na tyle proste że nie wymaga jakiegoś skomplikowanego designu. Raczej potrzebujesz solidnej literatury do procesora (aby dobrze/efektywnie zakodować ASM->maszyna). Taka literatura (o ile jej nie masz) dostępna jest na stronach Intel i AMD.
Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
5

Teraz mój edytor tekstowy potrafi zapisywać pliki 8)

Otrzymał(a) nazwę: Moko

Pobierz ostatnią wersje (alfa) 0.392 Uruchamiaj za pomocą Bochs!
Login jest zbędny (hasło też, wciąż nad tym pracuje).

user image

edytowany 2x, ostatnio: Akasei
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
4

Nie oszukujmy się - poziom dla zdecydowanej większości tutaj nieosiągalny. :)

Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
1

Próby z obsługą trybu graficznego (framebuffer).
Niestety nie mogę znaleźć w specyfikacji VESA (VBE 2.0, 3.0) obsługi trybów 16:9

user image
user image

Aktualizacja: 20:05
user image

edytowany 3x, ostatnio: Akasei
Akasei
Ups, to jest rozdzielczość 320x200x24bpp
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Ta strona może się przydać: http://wiki.osdev.org/Getting_VBE_Mode_Info
Zależnie od tego co masz za sprzęt możliwe, że musisz stosować "haki" w rodzaju tego: http://915resolution.mango-lang.org/

Akasei
Od wszelkich "haków" staram się trzymać z daleka :) Sprawdziłem datę ostatniej specyfikacji VBE (16 września 1998), chyba nie napiszą nowej.
Akasei
Tak, zdaję sobie sprawę z innych trybów karty graficznej, które nie są opisane w specyfikacji - a procedura 0x4F00 z przerwania 0x10 BIOSu je wykazała.
Azarien
@Akasei: gdzieś czytałem że w którejś wersji zrezygnowano z definiowania nowych rozdzielczości w standardzie, karta ma po prostu zgłaszać listę tego co obsługuje.
Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
4

Nie przestaję... :)

Rozdzielczość 320x200x32bpp, czcionka Sinclair (zdobycz od http://flabra.mine.nu/).

user image

Idzie ciężko, gdyż Qemu i VirtualBox nie posiadają debugera z prawdziwego zdarzenia, a Bochs nie wspiera kontrolera SATA.

edytowany 2x, ostatnio: Akasei
Shalom
Ty się módl żeby Xix tego tematu nie zobaczył bo ci nie da spokoju :P
Akasei
Chyba to już czytałem, ale temat nie był tak "rozbudowamy" :) Najbardziej rozśmieszył mnie ostatni post @azalut "ostatnio doszło mi sprawdzenie czy @Xix nie dodał nowego posta," :D
lukasz1235
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 8 lat
  • Postów:1105
0
akasei napisał(a):

Qemu i VirtualBox nie posiadają debugera z prawdziwego zdarzenia
Do Qemu możesz podpiąć GDB (http://wiki.osdev.org/Qemu#GDB-stub). IMHO to bardzo wygodne rozwiązanie, lepsze niż w Bochs.

Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
0
lukasz1235 napisał(a):
akasei napisał(a):

Qemu i VirtualBox nie posiadają debugera z prawdziwego zdarzenia
Do Qemu możesz podpiąć GDB (http://wiki.osdev.org/Qemu#GDB-stub). IMHO to bardzo wygodne rozwiązanie, lepsze niż w Bochs.

Do GDB mam mieszane uczucia, przykład:
Uruchamiam Qemu z parametrami "-s -S"
To jest mój plik .gdbinit

Kopiuj
set arch i386:x86-64
target remote :1234
break *0x100147
set disassembly-flavor intel
continue

Uruchamiam GDB i co się okazuje:

Kopiuj
GNU gdb (GDB) 7.9.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
0x0000fff0 in ?? ()
Breakpoint 1 at 0x100147
/root/.gdbinit:4: Error in sourced command file:
Remote 'g' packet reply is too long: 0000000000000000a08f12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047011000000000004600000008000000100000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000
(gdb)

Podobno popularny błąd przy debugowaniu binarek, którego rozwiązania nie idzie znaleźć...
Zdawało mi się, że mogę to zignorować i po prostu debugować dalej, więc wyświetliłem TUI dla rejestrów i disas.

Kopiuj
┌──Register group: general────────────────────────────────────────────────┐
│eax            0x0      0           ecx            0x0      0            │
│edx            0x663    1635        ebx            0x0      0            │
│esp            0x0      0x0         ebp            0x0      0x0          │
│esi            0x0      0           edi            0x0      0            │
│eip            0xfff0   0xfff0      eflags         0x2      [ ]          │
│cs             0xf000   61440       ss             0x0      0            │
│ds             0x0      0           es             0x0      0            │
│fs             0x0      0           gs             0x0      0            │
│                                                                         │
│                                                                         │
│                                                                         │
   ───────────────────────────────────────────────────────────────────────┘
  >│0xfff0  add    BYTE PTR [eax],al                                      │
   │0xfff2  add    BYTE PTR [eax],al                                      │
   │0xfff4  add    BYTE PTR [eax],al                                      │
   │0xfff6  add    BYTE PTR [eax],al                                      │
   │0xfff8  add    BYTE PTR [eax],al                                      │
   │0xfffa  add    BYTE PTR [eax],al                                      │
   │0xfffc  add    BYTE PTR [eax],al                                      │
   │0xfffe  add    BYTE PTR [eax],al                                      │
   │0x10000 add    BYTE PTR [eax],al                                      │
   │0x10002 add    BYTE PTR [eax],al                                      │
   │0x10004 add    BYTE PTR [eax],al                                      │
   └──────────────────────────────────────────────────────────────────────┘
remote Thread 1 In:                                       L??   PC: 0xfff0 
000000000460000000800000010000000100000001000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
7f0300000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000801f0000
(gdb)

GDB nawet nie ruszył z miejsca. Sprawdzam co za "kura" zatrzymała mój kod.

Kopiuj
(gdb) info threads
  Id   Target Id         Frame
  8    Thread 8 (CPU#7 [halted ]) (running)
  7    Thread 7 (CPU#6 [halted ]) (running)
  6    Thread 6 (CPU#5 [halted ]) (running)
  5    Thread 5 (CPU#4 [halted ]) (running)
  4    Thread 4 (CPU#3 [halted ]) (running)
  3    Thread 3 (CPU#2 [halted ]) (running)
  2    Thread 2 (CPU#1 [halted ]) (running)
* 1    Thread 1 (CPU#0 [running]) (running)
(gdb)

Sprawdzałem nawet nakładki do GDB, typu DDD... zawiesza się.

Dalej dałem sobie siana, i zostałem przy Bochs Enhanced Debugger.

Zobacz pozostałe 6 komentarzy
Akasei
@Proxima, znalazłem zbędną linię tak zgrubsza, pierwsza przed etykietą ".ok" Między innymi dlatego nie mam zamiaru upubliczniać kodu. Ludzie zaczną wytykać rzeczy, które wiem (i nie ma sensu tego tłumaczyć) - tylko nie mam czasu teraz się tym zająć :)
PR
Faktycznie, mov jest nie potrzebny, ale imo takie błedy-niebłędy, to nie są jakieś krytyczne rzeczy. Co do wytykania błędów to jest ok bo można czegoś się nauczyć, ale jak wiesz że one są, może po prostu spisz je na liście, gdzieś w komentach w danym pliku (w stylu nie-mam-na-to-czasu-chcesz-to-pomóż-naprawić).
Akasei
@Proxima, masz jeszcze kod ostatniej wywoływanej procedury :) http://paste.wataha.net/6X
Akasei
@Proxima: Możesz już przeglądać kod źródłowy systemu Cyjon OS, w tydzień uporam się z przepisaniem do końca :) https://github.com/Blackden/
PR
Najs, thx za wrzute. Z pewnością przejrze przy herbatce bo z tego co widziałem jest sporo komentów, to sie elegancko czyta.
lukasz1235
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 8 lat
  • Postów:1105
0

Zapewne próbujesz debugować binarkę 64-bitową. Faktycznie GDB ma z tym problem, ale istnieje patch (na wersję 7.1, nie wiem czy pasuje do nowszych): http://4programmers.net/Pastebin/4225. Widocznie ciągle tego nie naprawili...

Zobacz pozostałe 3 komentarze
lukasz1235
Dlaczego zmieniałeś linię 674? Patch tego nie ruszał.
Akasei
@lukasz1235, np: {link nieaktualny} patch nie przeszedł.
lukasz1235
No rozumiem, ale chodziło mi o to, żebyś wziął ten kod który ręcznie poprawiałeś i zostawił tą linijkę w oryginalnej postaci tzn. rsa-&gt;sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa-&gt;regs);. A resztę poprawiłeś chyba dobrze.
Akasei
@lukasz1235, ha ha - pobrałem najnowszą paczke, nałożyłem PATCHa, zignorowałem błąd, skompilowałem -- działa. Kto by się spodziewał :) Teraz czas na testy. Brak błędów, ładnie zatrzymało się na ustalonym EIP. Tylko podgląd instrukcji znikł "no asembly available" (rejestry widać). Teraz musze się nauczyć poprawnej obsługi GDB dla binarek (jestem zielony z tym debugerem). Zatrzymanie wykonywania kodu na 0x7c00 jest prawidłowe i wszystko ładnie widać (coś mi się zdaje, że to problem z 64 bitami).
Akasei
Tak, tracę dostęp do podglądu instrukcji już w GRUBie (jeszcze mój kod nie zaczął się wykonywać). Można kontynuuować, nie można wykonywać instrukcji po instrukcji. Dobra, ide pisać doktorat.
XI
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:231
0

Nic z tego nie rozumiem ale kupie sobie książkę o asm. Na początek dystrybucja Linuxa. Ale czy to co tu jest to jądro czy też dystrybucja Linuxa ?

Akasei
Jak już kupować książkę to coś porządnego: http://helion.pl/okladki/326x466/a_0003.jpg
XI
Ile to kosztuje ?
Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
6

Wyeliminowałem większość błędów po przejściu na tryb graficzny, za pozostałe znalezione z góry dziękuję.

user image

Proszę bardzo do testowania, przedstawiam dwa dyski twarde:
Qemu, Bochs: hda.zip (GRUB potrafi uruchamiać się wraz z jądrem do 15 sek.)
VBox: disk.zip

Dysk SATA w Qemu podłączamy w następujący sposób (Bochs nie obsługuje dysków SATA):

qemu-system-x86_64 -drive id=disk,file=hda.img,if=none -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0
W tym wydaniu jest już programowy kursor! :D

Próba zlokalizowania karty sieciowej e1000 i pobranie jej adresu MAC:

user image

Na tym zaprzestanę. Muszę skupić się na obsłudze dysków i systemów plików, aby za pomocą panelu sterowania móc zapisywać konfiguracje systemu np.: nazwa jednostki (localhost), strefa czasowa itp.

edytowany 13x, ostatnio: Akasei
Akasei
tak, uptime działa na sterydach, zapomniałem wyłączyć debugera :) (sprawdzałem nim poprawność wyświetleń przy różnych wartościach)
lukasz1235
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 8 lat
  • Postów:1105
1

Gdyby ktoś był zainteresowany to mam w pełni działający patch do gdb 7.9.1:

Kopiuj
--- remote-o.c	2015-05-13 19:36:05.000000000 +0200
+++ remote.c	2015-08-08 09:12:42.590407476 +0200
@@ -6154,8 +6154,25 @@
   buf_len = strlen (rs->buf);
 
   /* Further sanity checks, with knowledge of the architecture.  */
-  if (buf_len > 2 * rsa->sizeof_g_packet)
-    error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
+  //if (buf_len > 2 * rsa->sizeof_g_packet)
+  //  error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
+  // Parche implementado para solucionar el problem de reply too long
+  // by Matias Vara 
+  if (buf_len > 2 * rsa->sizeof_g_packet) {
+
+       rsa->sizeof_g_packet = buf_len ;
+
+      for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
+	{
+	  if (rsa->regs[i].pnum == -1)
+	    continue;
+
+	  if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
+	    rsa->regs[i].in_g_packet = 0;
+	  else
+	    rsa->regs[i].in_g_packet = 1;
+	}
+  }
 
   /* Save the size of the packet sent to us by the target.  It is used
      as a heuristic when determining the max size of packets that the
@@ -6167,6 +6184,7 @@
      update our records.  A 'g' reply that doesn't include a register's
      value implies either that the register is not available, or that
      the 'p' packet must be used.  */
+  // Tenemos un serio problema aqui al entrar en real mode me cambia el tamaño de los registros 
   if (buf_len < 2 * rsa->sizeof_g_packet)
     {
       rsa->sizeof_g_packet = buf_len / 2;
Zobacz pozostały 1 komentarz
vpiotr
OK, tnx. Widzę, że proces zgłaszania błędów w GDB jest nadal w latach 90-tych... (lista mailingowa).
Azarien
@vpiotr: a propos lat 90-tych, całkiem niedawno naprawiono w GDB debugowanie pod DOS-em (było zepsute od kilku wersji)
Akasei
@lukasz1235: łatka działa sprawnie :)
Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
2

Kod źródłowy systemu operacyjnego Cyjon OS (jak i on sam), zostanie wydany na licencji CC SA-NC-ND.
Wszelkie modyfikacje/poprawki/usprawnienia będzie można wprowadzać tylko za pomocą oficjalnych narzędzi np. Git.

Udostępniłem na licencji CC BY-NC-ND pierwszą część kodu źródłowego systemu operacyjnego Cyjon OS
Blisko 6 tyś linii kodu wraz z komentarzami.
https://github.com/Blackden/

Zapraszam do przeglądania.

edytowany 3x, ostatnio: Akasei
0

"Oby slady stóp twoich przetrwały na piasku"

Widzę czcionkę, którą kiedyś stworzyłem kopiując z zxspectrum a potem podarowałem w przypływie pijaństwa akasei :)

Miło przy okazji zobaczyć mnóstwo nowych twarzy i pozdrowienia dlawszystkich (i zielonego pq) :)

Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
0

Udostępniłem drugą część kodu źródłowego, zapraszam do przeglądania.

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

@Akasei: zakładam że pytałeś o to czy zajrzałem do kodu.

Nic na tyle zaawansowanego w ASM nie pisałem, więc tylko kilka porad natury ogólnej.

  1. Komentarze.
  • Jest ich dużo, szkoda tylko że po polsku. Blokuje to dostęp programistom spoza Polski (jest ich ok. 150x więcej zakładając podobny rozkład wszędzie).
  • czasami przesadzasz (piszesz oczywistości):
Kopiuj
	
	; kontynuuj z pozostałymi fragmentami
	loop	.loop

        ; powrót z procedury
	ret

Takie komentarze nie pomagają w czytaniu kodu.

  1. W wielu miejscach nie używasz stałych:
Kopiuj
        shr	eax,	9	; /512

... w tym samym pliku dalej

	; zamień na pozostałą ilość sektorów do załadowania
	shr	eax,	9

Zamiast tego powinno się dać zrobić:

Kopiuj
        SECTOR_CNT equ 9
        shr	eax,	SECTOR_CNT
  1. dokumentacja:
  • w readme powinno znaleźć się:
    a) wymagania sprzętowe
    b) przetestowane platformy (w tym wirtualne)
    c) adres www projektu
    d) wymagania softwarowe, np. wersja nasm, ew. adres www do kompilatora, wersja i rodzaj OS do kompilacji

  • brakuje katalogu \doc, a w nim:
    a) opis katalogów projektu
    b) opis zaimplementowanych komend
    c) lista znanych błędów oprogramowania (niekoniecznie - jeśli jest to prowadzone w github)
    d) opis komunikatów błędów (jeśli jakieś są): kod, treść, znaczenie

  1. marketing: dodaj zrzut ekranu do katalogu \doc i podłącz do README.md na github.
Zobacz pozostałe 10 komentarzy
Akasei
Udostępniłem trzecią część kodu źródłowego systemu Cyjon OS.
Akasei
@vpiotr: po części uzupełniłem :)
vpiotr
przydałby się makefile. Każdy Linux ma make. Lista pasujących celów: test, all, clean. Patrz https://www.gnu.org/software/make/manual/html_node/Goals.html oraz http://www.chemie.fu-berlin.de/chemnet/use/info/make/make_4.html
Akasei
@vpiotr: utworzyłem prosty Makefile, lepsze to niż nic :)
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
  1. użyj make w readme
  2. w plikach powinna być chociaż 1-liniowa informacja czego dotyczy dany plik, przykład: key_delete.asm: zawiera 14 linii wstępu i w żadnej nie ma takiej informacji

BTW, do kupienia jest nowe ZX, za jedyne 582 zł ;-)
http://www.zxvega.co.uk/

(myślę czy się nie skusić)

Akasei
jestem zwolennikiem C64 ;)
Akasei
make dopisany, a co do komentarza - nazwa pliku mówi sama za siebie
Akasei
PS: poszukuję edytora tekstowego (ide), w którym mogę zdefiniować rozmiary kolejnych tabulatorów w linii, aktualnie korzystam z Geany (gdzie nie ma takiej funkcji)
Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
10

Ja dalej żyję :)

user image

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

edytowany 6x, ostatnio: Akasei
Zobacz pozostałe 11 komentarzy
Akasei
interfejs nie będzie chyba trudny :D
Akasei
tekst wstawiony do okna jest automatycznie załamywany jeśli cały wyraz nie mieści się w oknie, okno message jest napisane naprędce
Akasei
tak samo musiałem napisać sobie program do tablicy kolorów z kodami, już mi się w głowie informacje nie mieszczą (mylą)
Akasei
funkcje do tworzenia okienek wywaliłem na zew. do liblioteki, teraz każdy program może z niej korzystać
Akasei
pora się wziąć za menu wyboru :D (będzie hardcore)
M4
  • Rejestracja:około 15 lat
  • Ostatnio:ponad 8 lat
0

Jak tam prace nad systemem? :)

Akasei
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:194
11

Skupiam się na obsłudze sieci, mogę odbierać i wysyłać ramki Ethernet, odpowiadać na zapytania ARP (czyli, ktoś pyta o adres MAC interfejsu skonfigurowanej dla danego adresu IP).
Niedawno mogłem mieć już gotowe odpowiedzi na protokole ICMP, ale okazało się że takowe ramki nie dochodzą do maszyny wirtualnej. Po prostu cisza, Wireshark jasno dawał mi do zrozumienia, że krążą po sieci, ale wirtualka krzyczy "basta".
Więc na razie rezygnuje z ICMP, i idę głębiej w IP>TCP, same podstawy by obsłużyć protokół HTTP.

user image

Ha! Stało się zadość :)

Pingi działają!
user image

PS: nie piszę stosu TCP/IP, dopóki nie obsłużę choćby połowicznie HTTP.

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

edytowany 7x, ostatnio: Akasei
Zobacz pozostałe 2 komentarze
Azarien
nie wydaje mi się to dobrym rozwiązaniem.
Akasei
chcę tylko zobaczyć jak Cyjon się ze mną wita przez przeglądarkę :D wtedy wezmę się na poważnie ;) (przynajmniej będzie doświadczenie już za pasem)
Akasei
udało się, otrzymuję już wszystkie pakiety, nawet ICMP :) teraz wirtualna dioda na karcie sieciowej "mryga" jak szalona xD
Akasei
długo nie trzeba było czekać :) idę sobie w nagrodę pograć w wiedźmina (krew i wino zamówione)
Akasei
jestem już w trakcie tworzenia obsługi protokołu http
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:dzień
1
akasei napisał(a):

Aktualizacja 11.06.2016

Nie rób w ten sposób, pisz nowego posta.

Jedna uwaga: czy piszesz kod tak by był thread-safe? Będzie ci potem łatwiej gdy dodasz obsługę wątków (nie wiem czy już masz) i wielordzeniowości.

Akasei
Trzymam się zasady, aby nie pisać pod własnymi postami (chyba, że dostanę przyzwolenie od moderatora).
fasadin
Jezeli jest dlugi odstep czasu to smialo pisz
somekind
Na tym forum nie ma żadnego zakazu pisania pod własnymi postami, więc trudno tu na coś przyzwalać w tej kwestii. :) Owszem, zdarza się, że scalamy posty, ale raczej wtedy, gdy ktoś napisze 3 posty w ciągu kilku minut, a nie jeśli będą między nimi wielodniowe przerwy. W takiej sytuacji wątek się nie odświeża, więc nikt nie wie, że coś napisałeś.
Akasei
No dobra, cokolwiek nie zmodyfikowałem to chyba osoby, które włączyły sobie obserwację - dostaną wiadomość :) ?
flowCRANE
@Akasei, tym bardziej, że ten wątek jest jak blog - co jakiś czas chcesz zaprezentować dodane nowości, więc piszesz nowy post; Jak będzie w kółko edytował jeden post to nikt się o tym nie dowie, bo Twój wątek nie zostanie podbity na początek listy wątków w kategorii;
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)