Hej,

Napisałem dodatek do Atari800Win - Profiler kodu wygenerowanego przez CC65 wraz z "podglądem źródeł".
Profilowanie odbywa się na podstawie wygenerowanych plików .lst i .label.
http://img10.imageshack.us/img10/1729/profilerr.png
Z tego powodu kody w C nie są potrzebne i można go używać też przy pisaniu w ASMie.

Dodałem komendy w Monitorze:
PSTART [1] - uruchomienie profilera. Parametr 1 powoduje profilowanie kodu wykonywanego z całej pamięci, nie tylko znanego z plików .lst. Przydatne przy nie korzystaniu wyłącznie z C.
PEND/PSTOP - zatrzymanie i zapisanie wyników.
PRESET - wyzerowanie liczników profilera (automatyczne przy resecie)

Jako GUI wykorzystałem lekko przerobiony profiler Sleepy.
Mój profiler działa podobnie jak Sleepy - co określony interwał sprawdza na jaki adres wskazuje rejestr PC, a następnie przelicza to na postać czytelną. Aktualnie działa na GetTicksCount, ale warto by go zsynchronizować z czasem emulowanego Atari, co umożliwiałoby profilowanie kodu podczas Full Speed.
Inną możliwością jest zliczanie wszystkich wykonywanych instrukcji, ale nie uwzględniałoby to cykli procesora. Wynik precyzyjnie pokazuje za to która instrukcja ile razy została wykonana.

Ktoś jest zainteresowany binarką, źródłami, diffem?

2

binarka!

przechodze na tumiwisizm

3

gdzie? ;)

Candle: fajnie się zgrywa z Twoją sygnaturką... :P

I Ty zostaniesz big endianem...

4

binarka invite only czy jak?

to ja też poproszę binarkę

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

5

Pytałem, czy ktoś chce, bo nie wiem, czy kogokolwiek projekt zainteresuje :-)
www.alamak0ta.republika.pl/Atari800WinProfiler.zip
Jest tam binarka, źródła i przykład używania. Aktualnie profiler korzysta z formatów plików wygenerowanych przez asembler i linker CC65. Nic nie stoi na przeszkodzie, aby korzystał z wygenerowanych przez XASMa, MADSa, lub cokolwiek innego.
Czekam na komentarze.

6 Ostatnio edytowany przez Marek Konopka (2009-03-10 13:08:07)

Yo!

Ciekawy pomysł. Zysk z takiego narzędzia będą miały głównie osoby chcące zapoznać się z CC65 oraz 6502. Doświadczeni koderzy wiedzą dokładnie "co w trawie piszczy". Z drugiej strony wyobrażam sobie, że po pewnych modyfikacjach narzędzie to mogłoby być przydatne dla każdego. Chodzi mi o możliwość określania procentowego udziału cyklowań rozkazów procesora, które są zmienne tzn. gdy suma adresu oraz rejestru przekroczy stronę. Na przykład:

lda adres,x // 4 czy 5 cykli?
lda adres,y

Dałoby to pewną wskazówkę co do możliwości potencjalnych optymalizacji. Nie jest to może jakiś wybitnie typowy i przydatny przypadek zastosowań, jednak wydaje się być sensowny. Być może znajdą się również inne, bardziej praktyczne przykłady.

Aby zastosowanie tego narzędzia nabrało większego sensu, na pewno potrzebny byłby dokładny profiling, zsynchronizowany z taktowaniem procesora.

Pewna uwaga dotycząca implementacji... Wygląda na to, że ścieżki w pliku .cfg nie mogą być relatywne w stosunku do katalogu, w którym znajduje się sam plik. Zmuszony zostałem do wpisania absolutnych wariantów, co jest rzecz jasna uciążliwe przy edycji ręcznej, gdy chcemy, dajmy na to, sprofilować jakiś jeden szczególny plik asemblerowy.

Przydałoby się wsparcie dla formatu Mads.
Zachęcam do dalszych prac nad programem.

7

w swoim profilerze (ktory bardzo powoli rozwijam) mam jeszcze feature'y, ktory czasami sa bardzo przydatne w zyciu:
- zaznaczenie danego obszru pamieci jako read-only - nic nam nie nadpisze danych/kodu,
- wylot programu przy pierwszym czytaniu/wykonaniu niezainicjowanej komorki pamieci - to szybko pacyfikuje ewentualne skoki w maliny.

8 Ostatnio edytowany przez ilmenit (2009-03-11 19:34:14)

News nie zasługuje pewnie na nowy wątek, ale dodałem dwie przydatne funkcjonalności:
- Profilowanie kodu skompilowanego MADS
- Profilowanie kodu "w stylu C" - po instrukcjach C, nie asma.
http://www.alamak0ta.republika.pl/profiler.html

9

konop: mysle ze to bron obusieczna - z jednej strony ktos kto pisze w asmie to sobie moze i bez tego poradzi, z drugiej strony ktos, kto rozwija sam ccs65 moze pouzywac tego, do poprawienia samego kompilatora

przechodze na tumiwisizm

10

1.20
- MADS code profiler works on labels now, not on procedures only, which has much more sense.
- MADS v1.7.3 compatibility added. By default it worked with 1.8.4.
- MADS example Tetris changed to Mandelbrot.

Przykład z MADSa - http://www.alamak0ta.republika.pl/mads.png