Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2007-04-26 00:56:51

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

ANARCH

Postanowiłem napisać emulator. Niestety nie znam żadnej architektury procesora na tyle, by móc się bawić w jej implementowanie. Rozwiązanie wydawało mi się proste... Właśnie tworzę własną.

ANARCH, czyli architektura bez władcy. Będzie się zmieniać. Nawet jej ostateczna wersja jeszcze pewnie zdąży się zmienić.

Oto ta część specyfikacji, która zapewne nie ulegnie już zmianie.

Mamy pamięć m - jest to tabica bajtów, w ofcijalnym emulatorze ma 640K długości (dlatego umawiamy się że wszystkie programy na ANARCH muszą póki co wykorzystywać nie więcej niż te 640K - zarówno kod jak i dane).

Mamy dwa wskaźniki: p oraz q. Wartość p i q jest zawsze dostępna dla procesora. Wskaźniki te wskazują na konkretny adres w pamięci. Czytanie wartości pod wskaźnikiem to czytanie danego adresu.

Tak więc mamy następujące instrukcje:

zwiększ p (p++)
zmniejsz p (p--)
zwiększ q (q++)
zmniejsz q (q--)
zwiększ wartość komórki pamięci wskazywanej przez p (m[p]++)
zmniejsz --//-- (m[p]--)
tak samo dla q (m[q]++)
(oraz m[q]--)
niech q skoczy do adresu wskazywanego przez p (q = m[p])
i na odwrót (p = m[q])
i niech p skoczy do adresu na który wskazuje (p = m[p])
i niech q... (q = m[q])
niech p i q zamienią się miejscami (temp = p; p = q; q = temp)
rezerwacja,
rezerwacja.

czyli jest ich 16 (14 używane). kolejne 8, to wariacje poprzednich, mianowicie te same arytmetyczne instrukcje, tylko że zamiast przesuwać wskaźniki lub wartości o 1 zrobią to o 8 (wysoce prawdopodobne że wywalę ten mały zestawik jak sobie przypomnę czy da się tak robić podstawowym zestawem jakoś szybciej).

następnie przychodzi czas na conditionale.

jeżeli wartość pod p jest 0, przeskocz do odpowiadającej instrukcji kończącej, w przeciwnym wypadku nie rób nic.
jeżeli wartość pod p nie jest 0, wróć do odpowiadającej instrukcji rozpoczynającej (aka 'while' w 'do...while')

czyli powyższe jest czymś w rodzaju

loop:
if (m[p] != 0) {...} else goto end;
if (m[p] != 0) goto loop;
end:

wiem że goto jest złe, ale tak to niestety działa na tym poziomie ;]

analogicznie q.

to kolejne cztery instrukcje, i już mamy zgodność z turingiem. teraz potrzeba nam tylko kontroli urządzeń, i tutaj wysiadam. kombinowałem coś w stylu:

"wyślij do urządzenia wskazywanego przez m[p] sekwencję zaczynającą się na m[p+1] a kończącą się na pierwszym napotkanym zerze, a zwrócony przez urządzenie wynik..."

"...pobieraj z urządzenia wynik i zapisz go pod m[q]"

tym sposobem można by najpierw przygotować tablicę poleceń, które trzeba przesłać do urządzenia, a nastpnie użyć pętli przesuwającej wskaźnik q dopóki urządzenie nie prześle 0. nie jestem pewien jak to będzie...

na razie DMA się nie martwię. to się przyda mniej więcej jak będziemy chcieli odtwarzać na tym muzykę.


===

jeśli nikt nie zasugeruje żadnej poprawki przez 24 godziny, uznaję wszystkie instrukcje (poza dwoma ostatnimi) za wersję ostateczną i zaczynam implementować. do końca tygodnia postaram się rozwiązać sprawę dostępu do urządzeń (obecne rozwiązanie wydaje mi się logiczne, ale nie wiem jak to będzie... co by było gdyby urządzenie zwróciło więcej danych niż jest pamięci, i na przykład nadpisało wykonywalny kod?)

gdy emulator będzie gotowy (zapewne "urządzenia" będzie można dodawać jako samodzielne pliki *.o, po prostu linkując je w całość) trzeba będzie napisać na niego asemblera oraz kompilator C, i jeśli to się uda...

portujemy Debiana na ANARCH.


dobry plan? ;]


===

aha, jeszcze kilka szczegółów technicznych. ANARCH: długość słowa 32 bity, big-endian. anarch: emulator implementuję w C++ ale staram się raczej używać funkcji bardziej w stylu C (malloc&free, struktury danych, wpistu wskaźników, zamiast np klas i obiektów, accessorów, referencji, wektorów, auto_ptrów itd). gdy wszystko już będzie działać, będę powoli przekształcał kod do "czystego" C i może nawet zacznę dodawać wstawki w asemblerze (żeby szybciej śmigało) albo nawet robić dynamiczną rekompilację z ANARCH na x86, ale to daleeekaa przyszłość ;]


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#2  2007-04-26 08:12:41

  Matthew - Użytkownik

Matthew
Użytkownik
Skąd: Lipka/Gdańsk (PG)
Zarejestrowany: 2006-06-09
Serwis

Re: ANARCH

Ja mam jedno zastrzeżenie: Po co?

Chcesz emulator? OK, znajdź specyfikację i wtedy sie baw. Po co emulator na którego nic nie ma? Marnujesz czas i zasoby.

Offline

 

#3  2007-04-26 08:24:03

  Bodzio - Ojciec Założyciel

Bodzio
Ojciec Założyciel
Skąd: Gorlice
Zarejestrowany: 2004-04-17
Serwis

Re: ANARCH

a ja Cię harry666t podziwiam :) - masz facet speeda


Debian jest lepszy niż wszystkie klony
Linux register users: #359018
[img]http://www.freebsd.org/gifs/powerlogo.gif[/img]
[url=https://goo.gl/photos/5XGKFkvaMimLwM2s9]Beskid Niski[/url]

Offline

 

#4  2007-04-26 09:10:04

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: ANARCH

Matthew, po co? Z tego samego powodu, dla którego powstał Linux: FOR FUN! :D

Granie w gry, słuchanie muzyki, oglądanie filmów, czytanie książek - to też strata czasu? ;]


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#5  2007-04-26 10:19:16

  zielkam - były zielony_83 :)

zielkam
były zielony_83 :)
Skąd: Zawiercie
Zarejestrowany: 2006-05-06
Serwis

Re: ANARCH

Matthew, po co? Z tego samego powodu, dla którego powstał Linux: FOR FUN! :D
[/quote]
Popieram! :-))
Poza tym sporo nauk można z takiej zabawy wyciągnąć ;-).


Zostałeś zarejestrowany jako użytkownik #416423 przez.. :mrgreen:
##
[url=http://fluxboxpl.org]FluxboxPL[/url] | [url=http://zielony.fluxboxpl.org/blog/]Mój Lepszy Świat[/url] | [url=http://www.unixy.pl/]UnixyPL[/url] | [url=www.adescom.pl]Telenia VOIP dla ISP[/url]
JID: zielony@jabster.pl

Offline

 

#6  2007-04-26 14:21:37

  Matthew - Użytkownik

Matthew
Użytkownik
Skąd: Lipka/Gdańsk (PG)
Zarejestrowany: 2006-06-09
Serwis

Re: ANARCH

Nie mówię że sama idea jest zła. Tylko jak coś robić to porządnie i z sensem. Jest wiele projektów OpenSource tworzących emulatory. Niech tam się harry wykaże. Na pewno więcej się nauczy i przyniesie mu to większą cześć i chwałę niż to.

Offline

 

#7  2007-04-26 17:42:08

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: ANARCH

Jak myślisz, łatwiej jest zbudować samochód z części, czy samemu wszystko zaprojektować od zera?

Jak myślisz, dlaczego wolę trudniejszą drogę?

I dlaczego ciągle krytykujesz moje pomysły? ;]

Poza tym sporo nauk można z takiej zabawy wyciągnąć ;-).[/quote]

Najważniejszy cel tego projektu.

===

Status prac: oficjalnie ANARCH ma 29 instrukcji, z czego wiele to takie hacki żeby było "na skróty", w tej chwili wszystkie od 0x00 do 0x19 są już zaimplementowane (pozostały najciekawsze: kontrola przepływu oraz obsługa urządzeń zewnętrznych), czyli zapewne jeszcze dziś zadziała procesor. Wtedy pozostanie tylko zaimplementowanie I/O oraz ładowania ROMów, i emulator gotowy. Góra trzy dni, i przy dobrych wiatrach będą działały już jakieś proste programy w stylu znajdowanie liczb pierwszych itp.

158 linii kodu.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#8  2007-04-27 20:48:07

  Matthew - Użytkownik

Matthew
Użytkownik
Skąd: Lipka/Gdańsk (PG)
Zarejestrowany: 2006-06-09
Serwis

Re: ANARCH

I dlaczego ciągle krytykujesz moje pomysły? ;][/quote]

Tam odrazu ciągle... tylko 2/3 skrytykowałem. WM bardzo mi sie podoba i gdyby nie to, że chwilowo jestem zamieszany w coś innego to z chęcią bym się przyłączył. A jeżeli chcesz się czegoś nauczyć to proponuję napisać własnego OS'a. Tak for fun... jak zawsze ;]

Offline

 

#9  2007-04-28 11:57:07

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: ANARCH

Heh, gdy skończę anarcha to myślisz że co będę musiał robić? Gry na niego powstaną same? :D


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#10  2007-04-30 00:12:31

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: ANARCH

Hehe, ja tam pozostaje przy budowie jednostek ALU :P Przynajmniej jedno jest pewne, że w 90% przy[adków przeniedienia się szybciej wygenreuja niż wynik zostanie ustabilizowany :D

Jak juz sie wypowiadałem na ten temat, to nie jest Turing do końca wogóle trzeba by sprawdzić czy będzie w pełni detrministyczny. I jak juz mówiłem w "konstrukcji" Turinga nie ma skoków, czyli tym samym pętli, a generuje najoptymalnijesze algorytmy. :>

A tutaj trochę bardziej zformalizowana reprezentacja maszyny Turinga :)
MT = < Q, Σ, δ, Γ, q0, B, F >


A jak tak patrze na specyfikacje to ona dotyczy maszyny nbitowej :/ A taka nie jest w stanie na razie powstać. Musisz sprecyzować szerokość lini danych i adresowych. Po drugie brakuje sprecyzowania typów adresowania ( bezpośrednie, pośrednie, przez parametr, itd. ).

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.009 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00101 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.147.75.46' WHERE u.id=1
0.00062 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.147.75.46', 1733048155)
0.00040 SELECT * FROM punbb_online WHERE logged<1733047855
0.00068 SELECT topic_id FROM punbb_posts WHERE id=58954
0.00121 SELECT id FROM punbb_posts WHERE topic_id=7775 ORDER BY posted
0.00058 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=7775 AND t.moved_to IS NULL
0.00012 SELECT search_for, replace_with FROM punbb_censoring
0.00088 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=7775 ORDER BY p.id LIMIT 0,25
0.00079 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=7775
Total query time: 0.00642 s