Hardcore compo

Wszystko dla programistów. C++, Delphi, Java, PHP, SQL

Hardcore compo

PostŚr gru 26, 2007 15:44

Hi,

Ostatnio naszła mnie ochota żeby zrobić hardcore compo - narazie napiszę o co chodzi i spytam czy był by ktoś chętny do zabawy ;>, jeśli ktoś będzie, to się zorganizuje ;>

OK, więc zabawa polega na tym że uczestnik dostaje wirtualną maszynę (RISCową), baaardzo prostą, pełną dokumentacje wraz ze źródłami do niej (read-only ;>) i hexedytor do ręki (ew jakiś program umożliwiający tworzenie binarnych plików, chodźby nasm+instrukcja db).

I teraz zadanie: napisać coś w tym... powiedzmy jakiś program, kilka programów+malutki fragment OSu, or sth ;> tu już freestyle ;>

Celem compo było by sprawdzenie siebie, tzn jak uczestnik by sobie w skrajnie trudnych warunkach programistycznych (hexedytor + dokumentacja procka).
Sądzę osobiście że to może być bardzo zabawne, czy nawet pouczające ;>

Co o tym sądzicie ?:>

UPDATE: 2008-01-02
Obecna wersja VM: http://gynvael.vexillium.org/vm_beta2_1b.zip
Zmiany: dodany benchmark (-DBENCHMARK przy kompilacji, ew #define BENCHMARK), i binarki od VC++ (3x szybsze)

Compo trwa do 15 lutego 23:59 ;>
Ostatnio edytowano Śr sty 02, 2008 8:55 przez Gynvael Coldwind, łącznie edytowano 1 raz
gynvael.coldwind//vx
Konsultacje/korepetycje: http://gynvael.coldwind.pl/?id=242 (programowanie, re, security)
Videoarty ReverseCraft: http://re.coldwind.pl <-=-> Blog: http://gynvael.coldwind.pl
Gynvael Coldwind
Przyjaciel
Avatar użytkownika
Posty: 1224
Dołączył(a): N lip 25, 2004 19:08

Spokojnie - to tylko reklama - zniknie po zalogowaniu :)

Pani Reklama
Automat
Posty:
Dołączył(a): ab aeterno
Lokalizacja: UW-Zaloga

PostŚr gru 26, 2007 15:50

Moze pisze troche offtop ale jak bym znal asm'a to bym sie chetnie zabawil w sumie wydaje sie to bardzo interesujace,ale trzeba miec tez wiedze za poziomie?
marcio15
user
Avatar użytkownika
Posty: 272
Dołączył(a): So maja 26, 2007 0:23
Lokalizacja: Milan

PostŚr gru 26, 2007 16:05

Ja sadze ze to rzeczywiscie hardcore compo ;>
W sumie moge sie pobawic, pomysl ciekawy, pytanie tylko czy by w praktyce wypalil ;)
ogolnie tak, jestem ZA :)
"Jedynym dowodem na to, że istnieje jakaś pozaziemska inteligencja, jest to, że się z nami nie kontaktują." - Albert Einstein
j00ru
Moderator
Avatar użytkownika
Posty: 147
Dołączył(a): Pn wrz 13, 2004 19:40

PostŚr gru 26, 2007 16:18

Kilka pytanek dostałem, zamieszczam odpowiedzi:
- Pisanie "kompilatora" po stronie hosta było by niedozwolone
- Pisanie interpretera/kompilatora po stronie guesta jest dozwolone
- Compo trwało by około miesiąca, może półtorej ;>
- Format instrukcji guesta był by baaaardzo prosty, nic tak skomplikowanego jak Intel. Np. adres_00001234 = adres_00005678 to bylo by 01 34 12 00 00 78 56 00 00 (gdzie 01 to opcode). Ew big endian ;>
gynvael.coldwind//vx
Konsultacje/korepetycje: http://gynvael.coldwind.pl/?id=242 (programowanie, re, security)
Videoarty ReverseCraft: http://re.coldwind.pl <-=-> Blog: http://gynvael.coldwind.pl
Gynvael Coldwind
Przyjaciel
Avatar użytkownika
Posty: 1224
Dołączył(a): N lip 25, 2004 19:08

PostŚr gru 26, 2007 16:46

hmm bardzo ciekawe ;]
mam nadzieje ze uda mi sie pobawic jezeli wypali
Za
Prawo jest najwyższa z nauk i co z tego skoro nikt jej nie przestrzega
scribere ergo sum
MaK
user
Avatar użytkownika
Posty: 124
Dołączył(a): N lis 05, 2006 17:59
Lokalizacja: Wrocław

PostŚr gru 26, 2007 17:48

To jeszcze ja bym sie chetnie pobawil, byloby ciekawie ;>
kotek951
user
Avatar użytkownika
Posty: 190
Dołączył(a): So gru 03, 2005 20:10

PostŚr gru 26, 2007 21:28

Bardzo ciekawe :)

Interesuje mnie i/o. Klawiatura rozumiem że tak; grafika/tekst?
Fr3m3n
user
 
Posty: 185
Dołączył(a): So sie 28, 2004 23:16

PostCz gru 27, 2007 0:29

Fr3m3n napisał(a):Interesuje mnie i/o. Klawiatura rozumiem że tak; grafika/tekst?


Jako że samo w sobie compo jest dość hmm złożone, to nie chce utrudniać. Stan klawiatury będzie odzwierciedlony jako tablica stanów poszczególnych klawiszy, 1 jeśli wciśnięte, 0 jeśli nie wciśnięte.

Analogicznie mysz, jeden DWORD X, drugi Y, trzeci będzie miał flagi stanu klawiszy.

Wyświetlaczem będzie okno 640x480x32 (bez alpha, 24 + padding), bez wsparcia dla trybu tekstowego. Pamięć obrazu będzie zamapowana na pewne adresy pamięci (przy czym przeniesienie tej pamięci na ekran będzie wywoływane dodatkową instrukcją - ot tak żeby nie rysować po pixelu ;>).


Jako że prototyp VM (serio prototyp) mam zrobiony, to mogę podać trochę szczegółów odnośnie architektury.

Na początek powiem że celem dla mnie była maksymalna prostota tworzenia instrukcji, żadnych skomplikowanych cudów typu Intel x86.
Instrukcji będzie około 20, wszystkie będą operować na zmiennych 32 bitowych (nie będzie wsparcia dla 16 i 8 bitów, ale to łatwo samemu zrobić). Dodatkowo, nie będzie rejestrów. Wszystko będzie odbywało się od razu na pamięci.

Instrukcje będą następujące (podam ich mnemoniki i zapis w C.. ofc przypominam że nic wam po mnemonikach, bo i tak będzie się pisać opkodami ;>)
MOV [mem], imm - czyli *mem = imm;
MOV [mem1], [mem2] - czyli *mem1 = *mem2;
wszystkie pozostałe instrukcje arytmetyczno logiczne mają warianty jak wyżej, czyli mem,imm i mem,mem:
ADD - czyli a+=b
AND - czyli a&=b
OR - czyli a|=b
XOR - czyli a^=b
SHL, SHR
GOTO (aka JMP)
GOTO_IF_EQUAL
GOTO_IF_LESS
HALT
MOVE_TO [[mem1]], [mem2] - czyli **mem1 = *mem2
MOVE_FROM [mem1], [[mem2]] - czyli *mem1 = **mem2
i może jeszcze coś..

jak widzicie nie ma na przykład mnożenia, dzielenia czy odejmowania, ale to można powyższymi opkodami spokojnie zapisać (dzielenia specjalnie nie daje bo to jest imho ciekawe do oprogramowania.. w razie czego jest SHR ;>>)

Dodam że format instrukcji to:
BYTE_Opcode [DWORD_Arg1 [DWORD_Arg2 ... [DWORD_ArgN]]]

Teraz tak... Pamięć ma adresowanie 32 bitową, z tym że tak na prawdę są 4ry obszary:
0x00XXXXXX - ROM
0x01XXXXXX - RAM
0x02XXXXXX - Special
0x03XXXXXX - HDD

Egzekucja rozpocznie się od ROM:000000. I tam też będzie załadowany program napisany przez uczestnika compo.
RAM - tam ma się nieograniczony dostęp (jak widać to jest 16MB).
Special - tutaj będą różne cuda, jak na przykład stan klawiatury, pamięć obrazu, stan myszki, tablice wektorów, etc...
HDD - zamapowany plik pamięci trwałej, read-write...

czyli np instrukcja MOV będzie służyła za równo do zabawy w RAMie, przestawianiu cudów w Special, jak i zapisu i odczytu z dysku. Ot taki KISS.

Dodatkowe ficzery to będą:
- Timer (milisekundowy)
- Timer (wywoływany co N instrukcji)
- Możliwość zdefiniowana własnych funkcji (zapisanych powyższymi opkodami) dla opkodów 0x80-0xFF
- Bezpośredni dostęp do Instruction Pointera
- Możliwość zdefiniowania własnych funkcji dla nielicznych exceptionów które będą (chyba 2 będą tylko)

Dodam że kod będzie mógł być wykonywany z dowolnego adresu, czyli ramu, romu, czy hdd... a nawet speciala (vm to będzie dopuszczać).

OK w sumie tyle...
gynvael.coldwind//vx
Konsultacje/korepetycje: http://gynvael.coldwind.pl/?id=242 (programowanie, re, security)
Videoarty ReverseCraft: http://re.coldwind.pl <-=-> Blog: http://gynvael.coldwind.pl
Gynvael Coldwind
Przyjaciel
Avatar użytkownika
Posty: 1224
Dołączył(a): N lip 25, 2004 19:08

PostCz gru 27, 2007 1:02

Rzeczywiscie przyznam ze to hardcore :P Niestety jak narazie nie bede potrafil tego ogarnac :( Może kiedyś ;] Teraz mozna conajwyzej postac z boku i sie poprzygladac ;]
JacuS
user
Avatar użytkownika
Posty: 1091
Dołączył(a): Cz maja 17, 2007 23:20
Lokalizacja: Ostrołęka/Warszawa

PostCz gru 27, 2007 12:23

Wstępna mapa pamięci dla Special... może się jeszcze do wieczora trochę zmienić...

(mały update - godz 11:04)
(update: 15:56)
(update: 7:43 dnia następnego: w wersji beta w katalogu jest pliczek doc/MemoryMap.txt... w nim jest aktualna mapa pamięci)
Ostatnio edytowano Pt gru 28, 2007 9:13 przez Gynvael Coldwind, łącznie edytowano 2 razy
gynvael.coldwind//vx
Konsultacje/korepetycje: http://gynvael.coldwind.pl/?id=242 (programowanie, re, security)
Videoarty ReverseCraft: http://re.coldwind.pl <-=-> Blog: http://gynvael.coldwind.pl
Gynvael Coldwind
Przyjaciel
Avatar użytkownika
Posty: 1224
Dołączył(a): N lip 25, 2004 19:08

PostCz gru 27, 2007 13:56

sweet ;>
memek//vx
To see a world in a grain of sand, And a heaven in a wild flower,
Hold infinity in the palm of your hand, And eternity in an hour.
William Blake
MeMeK
Moderator
Avatar użytkownika
Posty: 648
Dołączył(a): Śr sie 17, 2005 12:23

PostCz gru 27, 2007 14:55

Przeciek: testowy program implementujący opcode odejmowania (ma pewien bug odejmowanie, mianowicie nie może być zagnieżdżone, ale do testów jest ok)...

http://cpaste.com/4491

[ Dodano: Czw Gru 27, 2007 16:21 ]
Wersja alpha (pobawcie się, potestujcie)...

http://gynvael.vexillium.org/vm_alpha1.zip

Brakuje: Timerów wszystkich, Counterów wszystkich, obsługi myszki i hdd

Jeszcze będzie: to wyżej i z 8 SIMDowych opkodów

koniecznie patrzeć na src.. tam jest lista opkodów oraz mapa pamięci...

[ Dodano: Czw Gru 27, 2007 16:24 ]
http://gynvael.vexillium.org/gyn.h <=- to bedzie potrzebne do skompilowania ;p

[ Dodano: Czw Gru 27, 2007 21:12 ]
http://gynvael.vexillium.org/vm_beta1.zip
Wersja beta ;> bugi zglaszac
gynvael.coldwind//vx
Konsultacje/korepetycje: http://gynvael.coldwind.pl/?id=242 (programowanie, re, security)
Videoarty ReverseCraft: http://re.coldwind.pl <-=-> Blog: http://gynvael.coldwind.pl
Gynvael Coldwind
Przyjaciel
Avatar użytkownika
Posty: 1224
Dołączył(a): N lip 25, 2004 19:08

PostPt gru 28, 2007 12:08

asdf ;> na prosbe gyna ;>
"Jedynym dowodem na to, że istnieje jakaś pozaziemska inteligencja, jest to, że się z nami nie kontaktują." - Albert Einstein
j00ru
Moderator
Avatar użytkownika
Posty: 147
Dołączył(a): Pn wrz 13, 2004 19:40

PostPt gru 28, 2007 12:17

Eh nie lubie tego łączenia postów ;p

Anyway
http://gynvael.vexillium.org/vm_beta2_no_docs.zip

Wersja beta2, bez dokumentacji. Ma wszystko co miało być i kilka dodatkowych rzeczy.
Dokumentacja właśnie się piszę ;>
Bugi zgłaszać...

Regulamin compo pojawi się niedługo.
Start około 15 ;>

[ Dodano: Pią Gru 28, 2007 13:47 ]
http://gynvael.vexillium.org/vm_beta2.zip <=- paczka z dokumentacja

[ Dodano: Pią Gru 28, 2007 13:59 ]
Regulamin compo:

Start compo: oficjalnie dzisiaj o 15:00 (28 grudnia).. nieoficjalnie mozna juz pisac (13:19 ;>)
Koniec compo: 15 lutego o godzinie 23:59... chyba że bardzo dużo osob poprosi o przesuniecie

Zasady:
- Piszemy cokolwiek (wg wlasnego uznania) pod Hardcode C0MP0 VM
(obecna wersja http://gynvael.vexillium.org/vm_beta2.zip)
- Mozna pisac samemu, w druzynach, etc
- Mozna wymieniac sie kodem (byle by bylo oznaczone co jest co)
- Do tworzenia kodu mozna uzywac hexedytora lub prostego 'kompilatora' plikow binarnych (np nasm albo fasm)
- W tym drugim przypadku mozna uzywac jedynie instrukcji dd, db, dw, labeli, oraz define ale jedynie w celu
nazwania adresow. (Czyli np define mojazmienna 0x01000000). UPDATE: Można również stosować makra, jeżeli ktoś chce... (kilka osób mnie o to wymęczyło).. jeśli nie chce to nie musi... ale biada osobom korzystającym z makr jeśli moja praca będzie lepsza..... :DDD
Korzystanie z include i includebin jest dozwolone.
- Nie mozna korzystac z host-side kompilatorow (do kodu VM) ani pomagierow wprowadzajacych ulatwienia ;>
- Mozna natomiast stworzyc interpreter vm-side, i pisac kod pod ten interpreter ;>
- Aplikacja musi dzialac na oryginalnym VM, ale jesli ktos chce sobie zrobic host-side debugger oparty o VM to
nie ma problemu (zrodla sa).
- Mozna rysowac obrazki w czymkolwiek ;ppp
- W razie watpliwosci pytac Gyna (IRC: #uw-team)
- Dozwolone jest zewnetrzne modyfikowanie HDD

Prace do konca compo nalezy mi jakos dostarczyc - np wyslac na mejla. I sie upewnic ze doszlo.
Do pracy nalezy dolaczyc jej ZRODLA, wersje SKOMPILOWANA (rom), opcjonalnie dysk dwardy (HDD.vm), oraz readme.txt
w ktorym bedzie opis pracy, a takze napisane co takiego fajnego w tej pracy jest (np. jesli napisalismy
odjechany kawalek kodu, to tutaj mozna sie tym pochwalic).

Co do oceny prac, to jest to trudna sprawa. Prawdopodobnie bedzie nagroda publicznosci i wyroznienia publicznosci.
Byc moze rowniez beda wyroznienia za najciekawsze rozwiazania (dlatego warto je w readme.txt opisac) i za hi-techowosc pracy ;>
Po za tym wiadomo, w tego typu compo kto napisze cos, ten juz wygral, i moze do konca zycia dzieciom opowiadac ze
napisal w hexa zajefajna aplikacje/kilka aplikacji ;>>>
Ostatnio edytowano Pt gru 28, 2007 22:12 przez Gynvael Coldwind, łącznie edytowano 1 raz
gynvael.coldwind//vx
Konsultacje/korepetycje: http://gynvael.coldwind.pl/?id=242 (programowanie, re, security)
Videoarty ReverseCraft: http://re.coldwind.pl <-=-> Blog: http://gynvael.coldwind.pl
Gynvael Coldwind
Przyjaciel
Avatar użytkownika
Posty: 1224
Dołączył(a): N lip 25, 2004 19:08

PostPt gru 28, 2007 15:58

Nice, teraz pozostaje tylko wymyslic co by tu napisac ;>
kotek951
user
Avatar użytkownika
Posty: 190
Dołączył(a): So gru 03, 2005 20:10

Następna strona

Powrót do Programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości