Toster Napisano Grudzień 27, 2008 Zgłoś Share Napisano Grudzień 27, 2008 Witam, Jak to na switea bywa, duzo czasu, malo do roboty itd itp. W ramach nudzenia sie postanowilem napisac Glutona. Gluton jak sama nazwa wskazuje to virtualny procesor. Potrafi wszystko co powinien potrafic takowy procesor. Obecnie jest w fazie baaaardzo wczesnej i jego intuicyjnosc obslugi jest niczym vim. Testowanie tez jest w fazie niezwykle wczesnej wiec jak ktos kiedys bedzie chcial sie pobawic to jestem dzwieczny za wszelakie kody ktore zle na nim dzialaja. Krotka charakterystyka: Pamiec: 1 MB (da sie dowolnie konfigurowac z poziomu zrodel ) Liczba rdzeni: 1 (ale arch. przewiduje wiele) Cache L1: 16 bajtow (mmooooooccc) znane rozkazy: add r*,r* - dodaj do pierwszego rejestru wartosc drugiego sub r*,r* - odejmij od pierwszego rejestru wartosc drugiego mul r*,r* - pomnoz wartoscpierwszego rejestru przez wartosc drugiego div r*,r* - podziel wartoscpierwszego rejestru przez wartosc drugiego not r* - zaneguj wartosc rejestru clr r* - wyzeruj wartosc rejestru xor r*,r* - wykonaj operacje xor rej. nr 1 z rej nr 2 shl r*,A - przeshiftuj w lewo rejestr o zadana wartosc shr r*,A - przeshiftuj w prawo rejestr o zadana wartosc rol r*,A - przewin w lewo rejestr o zadana wartosc ror r*,A - przewin w prawo rejestr o zadana wartosc add r*,m - dodaj do rejestru wartosc spod adresu pamieci m (32b) sub r*,m - odejmij od rejestru wartosc spod adresu pamieci m (32b) mul r*,m - przemnoz wartosc rejestru przez wartosc spod adresu pamieci m (32b) div r*,m - podziel wartosc rejestru przez wartosc spod adresu pamieci m (32b) add r*,a - dodaj do rejestru 32 b argument sub r*,a - odejmij od rejestru 32 b argument mul r*,a - przemnoz wartosc rejestru przez 32 b argument div r*,a - podziel wartosc rejestru przez 32 b argument inc r* - zwieksz rejestr o 1 dec r* - zmniejsz rejestr o 1 jmp l - skok bezwarunkowy pod wskazany label jz l - skok pod label gdy ustawiony jest bit kontrolny ZERO jnz l - skok pod label gdy nie jest ustawiony bit kontrolny ZERO jg l - skok pod label gdy nie jest ustawiony bit kontrolny NEGATIVE jl l - skok pod label gdy jest ustawiony bit kontrolny NEGATIVE jsr l - odloz aktualy adres licznika programu na stos i skocz do wskazanego labela ret - pobierz adres licznika programu ze stosu move.s r*,r* - skopiuj zawartosc 2 giego rej, do pierwszego move.s r*,m - skopiuj do rej. zawartosc pamieci z podanego adresu move.s m,r* - skopiuj do pamieci zawartosc rej. movem.s r*,r* - przenies pamiec spod adresu rej.2 do adresu rej.1 (rejestry wskazuja adresy) move.s a,m - przenies argument pod wskazany adres pam. move.s a,r* - przenies argument do rejestru swap r*,r* - zamien wartosciami 2 rejestry cmp.s r*,r* - porownaj ze soba 2 rejestry cmp.s m,r* - porownaj adres pamieci z rejestrem cmp.s a,r* - porownaj z argumentem wartosc rejestru tst.s r* - ustaw bity kontrolne na podstawie podanego rejestu .s oznacza rozmiar operacji, dopuszczalne sa nastepujace: .b - 1 bajt .w - 2 bajty (slowo) .l lub .d - 4 bajty (dlugie slowo) ledenda: r* - rejestr, dostepne rejestry r0-r15 a - 32 bitowy argument np #1000, lub #$100 A - 8 bitowy argument, np %$10 m - 32 bitowy, adres l - label zaczyna sie @, konczy sie : stos: defaultowo wskazywany przez rejestr r15, nie jest ustawiany ! wiec trza go sobie samemtu gdzie ustawic do tej pory testowalem jeden program i dziala dobrze, wyglada on tak: move.l#1,r0 move.l#4,r1 addr0,r1 po wykonaniu w rejestrze r0 bedzie wartosc 5 link do pobrania projektu (lazarus) + exeka tutaj: http://thetosters.pl/gluton PS. Parser jest prosty niczym cep bojowy wiec prosze pisac prosto bez zbednych spacji itp itd Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Grudzień 27, 2008 Zgłoś Share Napisano Grudzień 27, 2008 Projekt w Lazarusie, super! Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Grudzień 27, 2008 Zgłoś Share Napisano Grudzień 27, 2008 No wiesz, to powinieneś FSL-a rozwijać Ogólnie: - widzę pewną niekonsekwencję - czasami gdy instrukcja ma dwa argumenty to wynik zapisuje w lewym, ale zdarza się, że w prawym, głównie chodzi mi o move. - mógłbyś zrobić tak, że zamiast móc jako drugi argument mieć tylko rejestr to mieć opcję: liczba expilicite jako 4567, albo wartość spod adresu wtedy zaczynałoby się od $ i wartość szesnastkowa oraz przy skoku oprócz przymusu etykiety dać, że można podać liczbę, wiem, że mało kto to by używał, ale jakiś feature jest - długość komend mogłaby być różna w zależności od argumentów, np. pierwszy bit określa ile bajtów jest na okreslenie komendy, jak 0 to kolejne 7 bitów to komenda, jak 1 to 15, następnie po 2 bity na opisanie każdego argumentu (czy rejestr,liczba,adres, oraz opcja, że podany jest indeks, że wartość jest pod adresem r2[operand], 4 bity puste(chyab, że robisz r0x,r0l itp.) no i w zależności jakiego typu jest operand to tyle bajtów na niego. - mieć np. r0h,r0l,r0x nic nie narzucam, ale wydaje mi się, że te pomysły byłybe dobre kto wie, może kiedyś FSL będzie się kompilował do glutona - {$Mode Delphi} daj w IFDEF FPC i wogóle zobacz jak to w TD wygląda;) bo kompilacja wali się Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 11, 2009 Autor Zgłoś Share Napisano Styczeń 11, 2009 Troche czasu minelo a tym czasem mamy nowszego glutona. Wersja 0.2 dostepna jest tutaj: http://thetosters.pl/gluton/ Chwilowo wersja rozwojowa dla kompilatora, w archiwum jest opis skladni i przyklad. Narazie mozna zrobic tylko kompilacje do bytecodu jeszcze nie ma uruchamiania programu, nad tym jeszcze pracuje. Jak się komus nudzi to zachecam do testow. Na obecna chwile program musi byc w pliku src.txt, po uruchomieniu kompilatora wyskocza rozne mniejsze pliki opisujace co sie stalo i czy zadzialalo. Pojawi sie tez plik ze skompilowanym programem. I to chwilowo tyle. Calosc zostala zaprojektowana od zera i przepisana na nowszy bardziej elastyczny system. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Styczeń 11, 2009 Zgłoś Share Napisano Styczeń 11, 2009 Wg mnei to błąd, gdy nei można dać etykiety przed komendą, tylko linijkę przed komendą test: sub.w r0, r1 nie przeszło tak samo jak zrobie linijkę test: (spacja) odnośnie grafu, jakbys wrzucił stan minusa, że jest wczytywany w którejś z liczb masz spore uproszczenie. Tak samo zamiast rozdzielać na 3 stany w zależności od typu liczby zrobić stan liczba i dla niego zrobić graf bez interpretera trudno powiedzieć czy działa Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 11, 2009 Autor Zgłoś Share Napisano Styczeń 11, 2009 pisze w opisie ze label musi byc w osobnej lini co do spacji na koncu to ciekawe, powinno wyciac, sparawdzimy Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Styczeń 11, 2009 Zgłoś Share Napisano Styczeń 11, 2009 może musi być w osobnej, ale mogłaby być opcja, że też może w jednej, mniej linijek trza pisać w glutonie Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 11, 2009 Autor Zgłoś Share Napisano Styczeń 11, 2009 moglo by byc, nie przecze ale narazie nie ma, wiec nie jest to blad bo jest zaznaczone zeby tak nie robic Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 15, 2009 Autor Zgłoś Share Napisano Styczeń 15, 2009 Kolejna wersja Glutona na serwerze: - pojawil sie Debuger (jeszcze nie dziala uruchamianie programu ale mozna testowac dissassembler) - pojawil sie poprawiony kompilator - zaimplementowano 80% funkcjonalnosci processora ale jeszcze nie jest podlaczona Dla ludzi znudzonych: http://thetosters.pl/gluton/Gluton.zip Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Styczeń 18, 2009 Zgłoś Share Napisano Styczeń 18, 2009 Fajne! Toster, dodaj jeszcze pobieranie klawisza z klawiatury i wyświetlanie znaku to będzie można normalny program w tym napisać Zrobimy potyczki algorytmiczne Ps. Połącz projekt z systemem plików który wcześniej napisałeś i będzie emulator nieistniejącej maszyny. Hehe. Nie wiem czy kojarzysz NoSense autorstwa Regedita (napisał właśnie coś takiego) Dam link: http://regedit.gamedev.pl/nosense/ Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 18, 2009 Autor Zgłoś Share Napisano Styczeń 18, 2009 Heh nie korzystam, ale glutona pisze w chwilach wolnego czasu w planach jest: 1) baaaardzo proste GPU (z okienkiem na ktorym bedzie to widac) 2) "interfejs" do ktorego da sie podlaczyc inne maszyny cos jak port RS-232 3) jakies inne maszynki (nie wiem jeszcze jakie ) ktore da sie podlaczyc do wspomnianego interfejsu 4) obsluga klawiry (tak jak mowiles) ale mysle ze nie za szybko to bedzie, bo obecnie musze potestowac sam procesor (nie wszystkie rozkazy jeszcze sa oprogramowane) teraz bede pisal obsluge rozkazow uzywajacych stosu. Ooo widze ze nosense to chyba dokladnie to samo co gluton Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 20, 2009 Autor Zgłoś Share Napisano Styczeń 20, 2009 Nom projekt kielkuje.... Link do projektu: http://www.assembla.com/wiki/show/Gluton Exec tam gdzie zawsze: http://thetosters.pl/gluton/ co nowego: 1. Pojawily sie breakpointy w debugerze 2. male poprawki stabilnosci 3. pojawila sie tablica IRQ dla procesora i szkielet jej zarzadzania na poziomie Cora 4. Pojawil sie szkielet South Bridge dla procesora 5. Pojawil sie nowy bit kontrolny w rejestrze stanu Poszukiwany ludzik ktory moglby popracowac nad portem kompilatora na Lazarusa bo ja tego na pewno nie zrobie a nie wydaje sie duzo pracy z tym. Niebawem bedzie wiecej... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Styczeń 23, 2009 Zgłoś Share Napisano Styczeń 23, 2009 Taki sobie program który z zadania ma obliczyć NWD z r0 i r1. (czyli z 123 i 43)KODmove.l #123, r0move.l #42, r1START:cmp.l r0, r1jz NWDjn DRUGAWIEKSZAsub.l r0, r1jmp STARTDRUGAWIEKSZA:cmp.l r1, r0jmp STARTNWD:jmp NWDMeritum. Chciałem debuggować i...Assertion Failure SimpleCore.pas : 1011 a potem Assertion Failure SimpleCore.pas : 427. Nie wiem czy ja jestem debilem czy co Jak sie kompiluje to pokazuje:KODLoading file:nwd.txtParser: Done.Compiler: Done.Writting output file:nwd.gcf Więc chyba jest ok.Poradź coś Toster Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 23, 2009 Autor Zgłoś Share Napisano Styczeń 23, 2009 Pojawila sie wersja 0.0.2.44 co nowego: - przebudowano przerwania, pojawil sie kontroler przerwan w procsorze - pojwily sie nowe komendy zwiazane z obsluga przerwan - pojawila sie komenda pozwalajaca zmieniac rejestr stosu - 100% komend jest w pelni zaimplementowana, wciaz trwaja testy stabilnosci - poprawiono krokowa prace debugera - zmiana typu rejestrow na Cardinal z int Edit: Spoko w07 wezme na tapete i zobacze co tez sie posypalo, ale jak sa asercje widac nie wierzylem sam sobie :> Edit2: Skopiowalem ten program, kompilacja poszla bez problemu, wielkosc pliku po kompilacji: 58 bajtow wrzucilem do debugera i dalem F9, program sie wykonal bez rzadnych exceptionw czy asersji, to samo przez F8. Wynik w r1: $51 (nie sprawdzalem czy dobry) Mozesz rzucic wiecej info co jak robiles krok po kroku ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Styczeń 24, 2009 Zgłoś Share Napisano Styczeń 24, 2009 Dziwna sprawa... Na prawdę dziwna bo dzisiaj działa. Nie wiem jak to możliwe. Nic nie zmieniałem w kodzie, nawet nie rekompilowałem. Po prostu uruchomiłem wszystko dokładnie tak jak zostawiłem wczoraj i śmiga. Pewnie jak zwykle wystarczyło wysiąść i wsiąść. Dodam, że wczoraj próbowałem kilka razy trochę modyfikować kod i kompilować od nowa, restartować debugger itp i to wszystko nie działało. Toster, piszesz genialne programy - same się leczą przez noc Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 24, 2009 Autor Zgłoś Share Napisano Styczeń 24, 2009 Jak zauwazysz jakies anomalie to dawaj znac. Musze rozszerzyc opisy coby bylo wiadomo jakie flagi w jakich sytuacjach sa ustawiane. Zauwazylem tez blad w komendach j** postaram sie dzisiaj naprawic. no i musze kompiler rozszerzyc aby dalo sie ladowac dane w rozane bloki pamieci a nie zawsze na zero + poprawic okno debugera do mnie wk*** jak nie widze co bylo wczesniej po F8 Edit: Na stronie projektu pojawila sie lista TODO na najblizszy czas, jak ktos ma jakis pomysl co by sie jeszcze przydalo to dajcie znac, bede uzupelnial Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Styczeń 25, 2009 Zgłoś Share Napisano Styczeń 25, 2009 Pamięć trzeba jakoś sobie rezerwować czy jest wolnoamerykanka i możemy pisać po czym nam się podoba? Jak to wygląda? Opisałeś komendy które w parametrze mają adres pamięci. Jest coś od alokacji czy cuś? Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 25, 2009 Autor Zgłoś Share Napisano Styczeń 25, 2009 Obecnie procesor dziala w trybie real mode, cala pamiec jest dostepna do operowania. Chwilowo nie ma konfigow i debuger tworzy srodowisko defaultowe czyli: Procesor: 1 rdzien, 16 rejestrow, defaultowo 15 rejestr jako wskaznik stosu Pamiec: 1MB dostepna przestrzen adresowa : 0 - $100000, predkosc zapis/odczyt: 50kB/Tick, 50kB/tick Przerwania: 255 dostepnych przerwan nie ma czegos takiego jak alokacja, co widzi procesor tam moze wepchnac palce ale uwaga: Nie ma obecnie pelnej synchronizacji cache procesora z pamiecia, wiec po zaladowaniu cache z pamieci i zmianie zawartosci pamieci nie nastapi resynchronizacja z cachem. Cache dla rdzenia obecnie to 44Bajty. Czyli mowiac wprost jesli procesor startuje od adresu 0, to wczytuje 44 bajty, zmiana obszaru pamieci 0-44 w tym czasie nie bedzie widziana przez rdzen ktory wykonuje program z tego zakresu, ale operacje typu dostep do pamieci zawsze beda mialy "prawdziwe dane" Edit: Ostatnie 3 dni poświęciłem na redagowanie dokumentacji w LaTeXie, może nie jest jeszcze kompletna ale powinna rzucac troche wiecej swiatla na niektore aspekty. W miare potrzeb (i prac) bedzie rozwijana. Zla wiadomosc jest taka ze zobaczy ona swiatlo dzienne razem z nowym buildem czyli w okolicach srody/czwartku. Licze Wo7 ze do tego momentu nie popelnisz samobojstwa. Edit: Doszlem do realokoacji kodu i tutaj pojawia sie ciekawe pytanie, czy skoki warunkowe powinny byc ofsetowe czy absolutne ? Narazie mam absolutne, co w polaczeniu z adresem zaladowania daje stabilny kod, jednakze wiem ze wiekszosc skokow warunkowych na rzeczywistych procesorach jest offsetowa. I zastanawiam sie czy zmieniac obecne podejscie czy zostawic po mojemu. Jakie jest wasze zdanie w tej kwestji ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Styczeń 30, 2009 Zgłoś Share Napisano Styczeń 30, 2009 Jak mnie nie zgnębią za bardzo na sesji to raczej nie będę skakał pod pociąg (od razu powiem ze nie wiem co to jest realokacja kodu. samo slowo znam ale nie wiem jak sie ono ma do takich maszyn) Co do skoków... To coś zmienia od strony programisty, który ma asm'a do dyspozycji? absolutne+adresem zaladowania = stabilny kod ..ale za to jest mniej elastyczny bo wczytując jakiś dodatkowy kod (będzie to w ogóle w Glutonie? ) do programu będzie on w innym miejscu i wszystko może się posypać. Jak dla mnie to możesz dać offsetowe skoki. Chyba nie jest to aż tak duży nakład pracy, a nie będziesz musiał potem przerabiać (albo patrząc z innej perspektywy: przerobisz na offsetowe gdy to będzie potrzebne). Czy na tym etapie są jakieś konsekwencje stosowania absolutnych albo offsetowych skoków? Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Styczeń 31, 2009 Zgłoś Share Napisano Styczeń 31, 2009 Skoki są zawsze wzgledem początku kodu, ale procesor wraz z systemem ten początek offsetuje gdy kod ładuje się do pamięci gdzie są też inne kody, dlatego w każdym naszym programie gdy przypisujemy coś do property nila to zawsze daje AVL z adresem 00000000 Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Styczeń 31, 2009 Autor Zgłoś Share Napisano Styczeń 31, 2009 "Skoki są zawsze wzgledem początku kodu" - blad skoki inne niz jmp sa zawsze offsetowe, dlatego bylo segmentowanie na obszary 64kb, bo mozliwy skok warunkowy byl maksymalnie na 64kb i dlatego ograniczenie plikow typu .com bylo do jednego segmentu. W trybie real mode dawalo to pewne ciekawe mozliwosci, bo plik com musial byc napisany w sposob dajacy calkowita realokacje. czyli mowiac wprost mozna bylo wziasc ten dane, wrzucic w dowolny obszar pamieci i skoczyc na jego poczatek, nie potrzebne bylo linkowanie ani inne cuda bo kod zawsze dzialal poprawnie. Co wiecej mogl sie skopiowac w dowolny inny obszar pamieci i dalej dziala dobrze. Skok ofsetowy to taki ktory przesuwa licznik procesora o zadany ofset, przy czym przesuniecie jest zawsze wzgledem aktualnej warotsci licznika co powoduje ze kod z takim opisem mozna przemieszczac dowolnie po pamieci (polceam gre core wars). Narazie z lenistwa zostawilem skoki absolutne. Jak kiedys przyjdzie potrzeba zmiany tego to rozszerze rdzen o nowe polecenia. Tymczasem dopisze tworzenie srodowiska uruchomieniowego na bazie xml'a i wypuszcze builda, ale to dopiero w tygodniu. sory za opoznienia, pisze glutona jak nie mam innych rzeczy na glowie... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Styczeń 31, 2009 Zgłoś Share Napisano Styczeń 31, 2009 Potem napiszemy na to system operacyjny A za opóźnienia nie musisz przepraszać bo my się nim bawimy jak nie mamy innych rzeczy na głowie Ps. Zaliczyłem pierwszy egzamin! (nawet w pierwszym terminie ) Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Styczeń 31, 2009 Zgłoś Share Napisano Styczeń 31, 2009 Tak trzymaj Wo7! Pozdrawiam! Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Luty 11, 2009 Autor Zgłoś Share Napisano Luty 11, 2009 I tak oto swiatlo dzienne zobaczyl Gluton 0.0.3.47 chwilowy adres tutaj: http://hostuje.net/file.php?id=7b8989c58db...c070fa4b88759f3 Nie ma uzupelnienia repa na svn'ie zrobie w weekend. a co nowego: - poprawiono metody skoków (j***) teraz wyznaczaja poprawnie adress docelowy - zmiany w dzialaniu polecen sub, div teraz odpowiednio dst = dst - src i dst = dst / src wczesniej bylo na odwrot - rozszerzono kompilator: dodano sekcje Code, Data, Binary w kodzie zrodlowym - rozszerzono kompilator: rozne sekcje moga byc defaultowo ladowane pod rozne adresy w debugerze - pojawila sie dokumentacja w formacie LateX'a - rozszerzono loader plikow skompilowanych - pojawila sie konfigurowalna maszyna virtualna - wyseparowane podstawowe interfejsy/klasy bazowe dla urzadzenia dzialajacego jak zegar i manager pamieci wersja jest jeszcze mocno testowa, wiec czasami moze byc krnabrna, ale jestem dobrej mysli Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Luty 11, 2009 Zgłoś Share Napisano Luty 11, 2009 LateX'a? Ty zdrajco, co z DeDo? A żeby Odra wylała Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.