Umbrella OS

Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
5

I oto jest UmbrellaOS
screenshot-20201007155704.png
Może niektórzy pamiętają mój poprzedni system operacyjny, BSCS, ale ten zawierał niestety trudny do rozwiązania błąd zmiany dysku, którego nie udało mi się rozwiązać. Moje drugie podejście do tego problemu to UmbrellaOS.
UWAGA: Nie zapewnia ochrony przed desczem
Domyślnym znakiem zachęty jest tylda (~) co można jednak zmienić za pomocą polecenia ask. Jest jeszcze polecenie zmieniające tryb ekranu, restartujące komputer itd. (brak obsługi dysków na razie).
Aktualna lista poleceń:

Kopiuj
ask x - ustaw znak zachęty
mode x - ustaw tryb ekranu
boot - restart komputera
type - narzędie "cat"
info - informacje o systemie
echo xxx - wyswietl napis, ta sama komenda co na dosie
abcd xxx - wykonuje program w języku ABCD (https://esolangs.org/wiki/ABCD)
halt - zatrzymanie CPU za pomocą opkodu F4h, a jak zawiedzie - za pomocą pętli nieskończonej

Oczywiście projekt zamierzam rozwijać i dodawać nowe polecenia. Inspiracją do 2giego podejścia do stworzenia OS'a był Cyjon OS.


edytowany 3x, ostatnio: Manna5
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
2

UmbrellaOS ma od teraz możliwość programowania
screenshot-20201008084236.png
Wszystko za sprawą tego, że dodałem do systemu interpretator języka ABCD (wersja z małymi literami, w oryginale należy stosować duże) https://esolangs.org/wiki/ABCD. Jestem świadomy, że ABCD nie jest z wielu powodów najlepszym językiem programowania, ale na pewno jest najprostszy do zaimplementowania w asmie (zarówno 8080 jak i x86, w tym przypadku x86). Aby rozszerzyć możliwości interpretatora, planuję dodać stos, możliwość czytania pamięci ram (na przykład aby dowiedzieć się jaki jest ustawiony znak zachęty), operacje bitowe i arytmetyczne, pętle... oczywiście pod warunkiem że zmieszczę się w boot-sektorze :). Na screenshocie widzimy szyfrowanie i odszyfrowywanie kodu Cezara za pomocą ABCD.


edytowany 1x, ostatnio: Manna5
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Ale to przecież nie jest OS, bo odpalasz to w Dosboxie. To co zrobiłeś to co najwyżej jakiś shell.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
mad_penguin
mad_penguin
dosbox ma chyba opcję bootowania z dyskietki?
Manna5
Tak, polecenie boot <sciezka_do_obrazu>. Ja tak właśnie robię (chyba że na pierwszym screenie, tam jest COM odpalony, ale zaraz potem przerobiłem to na prawdziwy system).
mad_penguin
mad_penguin
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Rzeszów
1

Ładnie. Pochwalisz się kodem? Myślałeś nad ładowaniem większej liczby sektorów, żeby nie mieć ograniczenia do 446 bajtów?

edytowany 1x, ostatnio: mad_penguin
Manna5
Nie, oczywiście mógłbym to zrobić za pomocą int13h ale wtedy musiałbym z góry wiedzieć z czego odpalany jest system (bo 1d=dyskietka, 80h=dysk twardy, 81h= cd, chyba 82h= pendrive)... a różne osoby mogą mieć różne stacje i różne preferencje. Kod udostępnię gdy system będzie w miarę gotowy.
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

W sumie dwie nowe miniaktualizacje
Po pierwsze, teraz wiersz poleceń jest case-insensitive, jak w DOSie (choć UmbrellaOS nie ma z systemem Marka Zbikowsiego nic wspólnego):
screenshot-20201008135929.png
A po drugie, kolor znaków jest zmieniony na fioletowy (aby to zobaczyć, najpierw musimy przejść rzecz jasna w tryb graficzny komendą mode B*):
screenshot-20201008140259.png
*Standardowo tryb ekranu w poleceniu mode ma być cyfrą dziesiętną, ale tryb graficzny ma numer 18 (12 szesnastkowo) więc gdy podamy duże B, to w wyniku odejmowania 66-48=18 ustawimy właśnie ten tryb.


edytowany 1x, ostatnio: Manna5
katakrowa
  • Rejestracja:około 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
5

Jako element edukacyjny rzecz zawsze wartościowa i za to gratuluję. Jednak to co robisz na miano systemu operacyjnego nie zasługuje ( z definicji).
Obecnie to program uruchamiany z MBR. Nawet bardzo stare biosy były wielokrotnie bardziej skomplikowanymi aplikacjami a jednak na miano systemów operacyjnych nie zasługują.
Jak chcesz napisać system operacyjny to przynajmniej dowiedz się czym takowy jest: https://pl.wikipedia.org/wiki/System_operacyjny


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 1x, ostatnio: katakrowa
lambdadziara
ten uzytkownik ma chyba z 15 lat albo mniej
katakrowa
@lambdadziara: no to już stary chłop ... Mógłby wiedzieć co to system operacyjny.
mad_penguin
mad_penguin
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Rzeszów
1

mógłbym to zrobić za pomocą int13h ale wtedy musiałbym z góry wiedzieć z czego odpalany jest system

Number dysku z którego jest odpalony system dostajesz w rejestrze DL:

An MBR is loaded by the BIOS at physical address 0x7c00, with DL set to the "drive number" that the MBR was loaded from.

https://wiki.osdev.org/MBR_(x86)#MBR_Bootstrap

Shizzer
  • Rejestracja:prawie 8 lat
  • Ostatnio:4 miesiące
  • Postów:231
2

oczywiście pod warunkiem że zmieszczę się w boot-sektorze

Dobrze rozumiem, że nie masz zaimplementowanego bootloadera w tym projekcie i nie wychodzisz poza boot-sektor? Jeśli tak jest to, żebyś mógł pisać o tym, że Twój projekt jest chociaż zalążkiem systemu operacyjnego powinieneś chociaż załadować więcej sektorów, napisać minimalistyczny kernel i skoczyć do tego kernela za pomocą bootloadera właśnie. To co zaimplementowałeś teraz to raczej shell. Przecież już samo ograniczanie się do tych 512 bajtów powinno być zachęcające, żeby jednak większą ilość miejsca mieć do dyspozycji. Możliwe, że ją znasz, ale ta strona https://wiki.osdev.org/Main_Page jest bardzo przydatna jeśli chce się stworzyć autorski OS.


Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

No, wresczie UmbrellaOS ma więcej miejsca :)
screenshot-20201008160703.png
Oczywiście na screenie tego nie widać. Wszystko dzięki "agencji mieszkaniowej" int13h oraz użytkownikowi @mad_penguin, który przysłał mi odpowiedź, skąd wiedzieć pod jakim numerem jest nośnik z systemem. Przez rozszerzenie możliwości systemu, DOSBox odmówił współpracy, i od teraz będę musiał testować system pod Bochsem. Na razie nie wiem jeszcze co zrobić z tym bonusowym pół kilobajta.


Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

Pierwsze korzyści z wprowadzenia second-stage
screenshot-20201008173416.png
Jak się zapewne domyślacie jest to nic innego jak pomoc, której tekst jest umieszczony w 2gim sektorze dysku.


obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około 13 godzin
1
Manna5 napisał(a):

(choć UmbrellaOS nie ma z systemem Marka Zbikowsiego nic wspólnego):

Swoją drogą to ciekawe że w 2020 wszystkie pliki .exe i .dll w windowsie nadal zaczynają się jego inicjałami a jego nazwisko nie jest szczególnie znane.
Co do projektu to rozumiem że masz dużo frajdy i się dużo przy nim uczysz, ale myślę że zdajesz sobie sprawę że nikt go nigdy nie zainstaluje i nie użyje (nie dałeś chyba nawet linka żeby to umożliwić), więc nie musisz opisywać tak dokładnie instrukcji jego użytkowania. Jak chcesz się pochwalić to możesz napisać tylko co już system potrafi.

edit:
hah - sprawdziłem i jego inicjały MZ oraz tekst "This program cannot be run in DOS mode." przedostały się oczywiście nawet do web assembly w blazorze (demo https://blazor-demo.github.io/ ). To już nadaje się do programistycznych WTF jak dalece może zajść :)


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
edytowany 3x, ostatnio: obscurity
Manna5
Linki dam jak będzie w miarę gotowe
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 9 godzin
2
Manna5 napisał(a):

I oto jest UmbrellaOS

Próbowałeś to odpalić na fizycznym komputrze, bez emulacji? :-)

kilka wyzwań:

  • obsłużyć ładowanie reszty OSa z jakiegoś prostego filesystemu (FAT12/FAT16/FAT32 albo nawet exFAT) żeby móc cokolwiek więcej załadować i mieć wszystko (poza bootloaderem) w normalnych plikach
  • odpalić tryb chroniony
  • napisać diagnostycznego "bluescreena" (będzie bardzo potrzebny żeby widzieć co się stało, a nie tylko zwiecha lub reset przy każdym wyjątku)
  • przerwanie BIOSu odpalać z wykorzystaniem v86 (i w miarę postępów, uniezależniać się od BIOSu)
Manna5
Implementowanie FAT12 w czystym asemblerze może być trudne, ale jak może w późnym etapie rozwoju tak zrobię.
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
2

System plików.. jest
screenshot-20201012144245.png
Każdy system operacyjny, nawet amatorskie dzieło jedenastolatka, potrzebuje systemu plików. Na zrzucie ekranu widać listę plików wypisaną poleceniem list (zamierzam zmienić je wkrótce na dir jak w CP/M i DOSie). UmbrellaFS cechuje brak katalogów, ale za to nazwy plików mogą być bardzo długie, bo są definiowane dynamicznie. Na razie jest to RAM-dysk, ale planuję dodać obsługę plików zapisanych na dyskach. Plik 2nd_file.bmp ma rozszerzenie wskazujące na to, że jest obrazkiem, ale UmbrellaOS obrazków nie obsługuje (jakby ktoś się błędnie domyślił).


obscurity
ciekawostka: DOS też na początku nie obsługiwał katalogów, a znak "/" był użyty do przekazania parametrów do programu. Stąd też gdy wprowadzono katalogi nie można było użyć powszechnie używanego symbolu do oznaczania podzbioru slasha "/" i użyto zamiast tego backslasha ""
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

Pracuję nad nowymi operacjami na systemie plików, teraz type
screenshot-20201014194321.png
No, teraz a właściwie trochę później będziemy mieli polecenie type. Jescze jednak nad tym pracuję. Aktualnie jest to polecenie wywoływane bez parametrów i wypisuje wszystkie dostępne pliki. Docelowo ma działać dokładnie tak jak na CPM/DOS ale bez wildcardów.


obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około 13 godzin
1

Fajnie, może załóż jakiegoś bloga czy jak to się tam teraz nazywa i tam się chwal postępami, chętni na pewno będą śledzić.
Zastanawia mnie - ile potrzeba pracy żeby taki własny system mógł uruchomić prostą aplikację typu hello world, ale skompilowaną w języku wyższego poziomu, np w takim C? (kompilowaną z zewnątrz, nie na tym samym systemie)


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 9 godzin
0
obscurity napisał(a):

Fajnie, może załóż jakiegoś bloga czy jak to się tam teraz nazywa i tam się chwal postępami, chętni na pewno będą śledzić.

Zastanawia mnie - ile potrzeba pracy żeby taki własny system mógł uruchomić prostą aplikację typu hello world, ale skompilowaną w języku wyższego poziomu, np w takim C? (kompilowaną z zewnątrz, nie na tym samym systemie)

Trzeba by obsłużyć jakiś popularny format exeka (jak ELF pod Linuxem czy PE pod Windowsem) i napisać loader (przynajmniej uproszczony, by z poziomu asm załadować pierwszy plik).
Do tego potrzebny byłby support ze strony kompilatora. Więc potrzebny jest kompilator który wygeneruje taki exek ale bez zależności od konkretnego systemu (Linux, Windows) które to zależności trzeba najpierw wykastrować, powoli zastępując własnym runtime'em zależnym od kernela naszego systemu...

Nikt nie mówił że pisanie OSa jest łatwe.

Manna5
Może tak, ale ja planuję raczej czysty kod x86 z sygnaturą JM na początku. PE jest za trudne do zrobienia w asmie, nie wiem jak z ELFem. Niemniej hello world na finalnej wersji systemu powinno się uruchomić.
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

A teraz, możemy doprecyzować, zawartość którego pliku chcesz wypisać
screenshot-20201015171746.png
Oczywiście, na razie określamy plik za pomocą identyfikatora, nie nazwy (jak w BSCS), docelowo ma być za pomocą nazwy. W formie pośredniej polecenie type już działa prawidłowo. Poza tym, w międzyczasie czas na małe omówienie systemu plików UmbrellaFS. Jest on w gruncie rzeczy bardzo prosty. Oto jego struktura:
-Na początku dysku jest bajt oznaczający liczbę plików na dysku (jak wynika z ograniczeń ośmiu bitów, możesz mieć maksymalnie 255 plików)
-Dla każdego pliku:
-Nazwa (ASCII), null-terminated
-Treść pliku
-Znak ASCII RS - Record Separator (zastanawiam się cały czas nad zmianą na FS - File separator), dziesiętnie 30
-Na końcu znak ASCII GS - Group Separator, dziesiętnie 29
Na pierwszy rzut oka wydaje się trudny w operowaniu na nim, lecz w rzeczywistości jest to jakoś możliwe.


edytowany 1x, ostatnio: Manna5
mad_penguin
mad_penguin
a co jeśli w treści pliku będzie trzeba umieścić znak RS albo GS?
obscurity
po co jakieś null-terminatory i separatory? Czemu nie zapisać offsetów i rozmiaru pliku. To się wysypie na pierwszej bitmapie
Manna5
@mad_penguin, Eee, właśnie to mnie niepokoi...
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około 13 godzin
0
Azarien napisał(a):

Trzeba by obsłużyć jakiś popularny format exeka (jak ELF pod Linuxem czy PE pod Windowsem) i napisać loader (przynajmniej uproszczony, by z poziomu asm załadować pierwszy plik).
Do tego potrzebny byłby support ze strony kompilatora. Więc potrzebny jest kompilator który wygeneruje taki exek ale bez zależności od konkretnego systemu (Linux, Windows) które to zależności trzeba najpierw wykastrować, powoli zastępując własnym runtime'em zależnym od kernela naszego systemu...

Nikt nie mówił że pisanie OSa jest łatwe.

Myślałem o jakimś prostszym sposobie i własnym formacie execa, jeśli to ma być naprawdę osobny system to czemu ma używać formatu windowsa czy linuksa - no chyba że to wyderOS i będzie obsługiwał wszystkie natywnie, ale wtedy pewnie siostra by musiała pomóc.

Miałem na myśli coś w stylu kompilacji w normalnym kompilatorze i transpilacji - wyjęcie sekcji skompilowanego kodu i danych i poprawienie offsetów w adresach i podmiana zależności do systemu (dla hello worlda nie powinno być tego aż tak wiele?) - wydaje mi się to prostsze i realnie wykonalne w pojedynkę, dlatego pytam czy się tak da czy są jakieś przeszkody o których nie wiem. Wskoczenie na wyższy poziom by przyspieszyło tworzenie takich poleceń jak "type" i szybciej by można było dojść do jakichś ciekawych rezultatów


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
mad_penguin
mad_penguin
jakiś czas temu naklepałem mały programik bootsektorowy w asmie i C kompilowanym do asma przez smallerc https://github.com/alexfru/SmallerC pamiętam, że było to dość proste do ogarnięcia
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

A może.. dodałbym przerwanie UmbrellaOSa
Niedawno wpadłem na pomysł, że być może dodam do UmbrellaOS'a moje własne przerwanie, int 40h. Proszę jednak o informację co było by lepsze dla osoby piszącej aplikacę UmbrellaOSową - przerwanie 40h 55h czy po prostu wywoływanie funkcji API po adresach. Co o tym myślicie?


edytowany 1x, ostatnio: Manna5
Akasei
Wypraszam sobie :) przerwanie 0x40 jest zarezerwowane dla Cyjon OS ;)
Manna5
Naprawdę? Ale trafiłem. To zrobię 41h
Akasei
@Manna5: programowanie systemowe to Sztuka, wykorzystaj "ładny" numer przerwania np. 0x60 (0x40 Cyjon, 0x60 Umbrella, 0x80 Linux)
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
1

Mamy już możliwość wskazywania plików po nazwach
screenshot-20201019164037.png
Teraz to wygląda trochę lepiej, składnia komendy type jest teraz identyczna jak w CP/M (tylko bez wildcardów). Skopiuję jeszcze kod wyszukujący plik po nazwie z polecenia type tworząc nową komendę, call - do uruchamiania programów. Assembler na początku potrafi zniechęcać, ale potem nie jest to takie trudne.


edytowany 1x, ostatnio: Manna5
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
1

A oto pierwsza aplikacja UmbrellaOS
umbrellaos_apprunner.png
Nie wiedziałem, że uda mi się to zrobić tak szybko. Kod źródłowy przykładowej aplikacji:

Kopiuj
db "JM"
mov ecx,@f
call puts
ret
@@:
db "Hello!",0

edytowany 1x, ostatnio: Manna5
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
2

Nowa aktualizacja, przerwanie UmbrellaOS'a int 55h już działa!
Tym razem nie ma screenshota do pokazania, bo z punktu widzenia użytkownika wszystko wygląda tak samo. Zmienia się jednak kod przykładowego programu hello.com:

Kopiuj
db "JM"
mov ecx,@f
mov ah,3
int 55h
ret
@@:
db "Hello!",0

Oczywiście, można po prostu wywoływać procedury systemowe bezpośrednio, ale z przerwaniem kod jest krótszy (2 bajty na przerwanie zamiast pięciu na wywołanie procedury po 32bitowym adresie). Lista dostępnych funkcji przerwania w UmbrellaOS:

Kopiuj
mov ah,1
mov al,<kod_ascii_znaku>
int 55h ;wypisz jeden znak
mov ah,2
int 55h ;pobierz znak z klawiatury do AL
mov ah,3
mov ecx,<adres_tekstu_null_terminated>
int 55h ;wypisz tekst na konsolę
mov ah,4
mov ecx,<adres_buforu>
int 55h ;wpisanie tekstu z klawiatury do naciśnięcia klawisza o kodzie 13 (najczęściej Enter)
mov ah,5
int 55h ;restart komputera, to samo co int 19h

Wybrałem 55h dlatego, że 5 to moja ulubiona cyfra, LOL. Druga rzecz, którą zmieniłem to optymalizacja - do tego momentu kod wyszukujący plik był po prostu skopiowany z kodu polecenia type do polecenia call, teraz jest zawarty w osobnej procedurze.


Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

Kolejny "dwupak" aktualizacji UmbrellaOS'a
screenshot-20201030105137.png
Tym razem aktualizacje też są dwie. Pierwsza, łatwo zauważalna to kontrola hasła (na razie nie można go zmieniać). Druga, którą też na screenshocie zobaczyć można, ale mniej rzuca się w oczy jest mała restrukturyzacja wiersza poleceń. To najlepiej zaprezentować graficznie:
screenshot-20201030113017.png
UWAGA: Tak naprawdę zamknięcie powłoki głównej nie skutkuje bezpośrednio resetem, ale wraca do kontrolera hasła, który automatycznie uznaje, ze użytkownik chce zakończyć pracę z systemem i resetuje komputer.
Na zrzucie ekranu na początku uruchomiłem program, który najpierw pyta mnie o imię, potem przechodzi na drugi plan i uruchamia powłokę (testowo uruchamiam tam polecenie echo hi), którą zamykam, a aplikacja nadal przechowuje moje imię i dopiero teraz mnie wita. Następnie ręcznie uruchamiam podpowłokę poleceniem sbcp (mnemonik SuBCommandPrompt), wykonuję testowe polecenie i wracam na poziom główny poleceniem exit. Jeśli wpisałbym i zatwierdził exit drugi raz, maszyna wirtualna zostałamy zresetowana, ale na screenshocie nie byłoby tego widać. Wcześniej nie było w ogóle żadnego stosu powłok, wiersz poleceń był tylko jeden.


edytowany 1x, ostatnio: Manna5
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

A teraz obsługa backspace i powtarzania poleceń
screenshot-20201031123406.png
Pisząc funkcję wczytywania ciągów znaków z klawiatury, łatwo zapomnieć o możliwości usunięcia ostatnio wpisanego znaku klawiszem Backspace. UmbrellaOS do tej aktualizacji na to nie pozwalał, lecz teraz już tak. Inną rzeczą, której brakowało mi podczas debugowania linii poleceń UmbrellaOS, było powtarzanie poleceń, jak w wierszu poleceń Windows strzałką w górę. I tą możliwość dziś dodałem, ale do powtarzania poleceń zamiast strzałki w górę wybrałem ESC. Trzecia zmiana to informacja o błędnym poleceniu - wcześniej nierozpoznane komendy były ignorowane.


Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
2

do powtarzania poleceń zamiast strzałki w górę wybrałem ESC

Nie uważasz, że może to być nieco mylące?

W zasadzie wszystkie inne systemy operacyjne implementują ESC jako przerwanie obecnej operacji, zamknięcie aplikacji itd., a nie powtórzenie poprzednio wykonanej operacji.


edytowany 1x, ostatnio: Patryk27
Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
1

Zgodnie z uwagą @Patryk27 ustawiłem ESC jako zamknięcie aplikacji, a do powtarzania polecenia będzie odtąd służyć strzałka w górę, tak jak w DOSie. Jest też oczywiście opcja nie reagowania na ESC (domyślnie wyłączona), używa jej kontroler hasła.


Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
2

UmbrellaOS wypisuje aktualny stan rejestrów
screenshot-20210211121512.png
Chciałbym poinformować, że w związku z tym, że UmbrellaOS miał już dużą funkcjonalność, kod wyglądał jednak brzydko, przez co zdecydowałem się napisać go od nowa. W nowej odsłonie systemu zacząłem właśnie od tej czynności.


Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Kraków
  • Postów:639
0

A także pamięci
screenshot-20210211131951.png


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)