[SharpMZ] Breakpointy v emu - aneb navrhujeme novy programovaci jazyk s vlastnim operacnim systemem :)
Michal Hucik - ORDOZ
ordoz na ordoz.com
Čtvrtek Říjen 1 10:52:47 CEST 2015
Predpokladam, ze mas na mysli logovani jako jednu z moznych akci
breakpointu - ci spise lepsi oznaceni by bylo "udalosti". Mohlo by se
tam definovat neco jako format a params, ktere by se pak v bezpecne
podobe predaly do fprintf(). V pripade takoveho logovani by se asi
urcite hodilo mit k dispozici i variable s uplynulym casem emulace -
udrzuju v gdg unsigned int ve kterem je celkovy pocet vykonanych snimku
a samozrejme je k dispozici i pocet vykonanych gdg taktu v ramci
aktualniho snimku. Tim si lze udelat predstavu o tom jak jsou od sebe ty
udalosti casove vzdaleny, coz muze byt take uzitecne.
Logovani by mohla byt mozna kapitola sama o sobe ... Parkrat jsem to
pouzival predevsim k ladeni emu. Vetsinou mi stacilo od pruchodu urcitou
adresou zacit logovat na kazdem radku obsah regPC. Ve slozitejsich
pripadech jsem obcas logoval komplet disassemblovany vystup i s obsahem
registru. Takovehle logy ovsem behem chvilky docela slusne rostou
(zvlaste kdyz jsou v txt podobe) a k jejich analyze si pak vetsinou
musim napsat treba nejake perl scripty. Takovy masivni log je ale asi uz
dost specificky a mozna bude lepsi, kdyz si jej proste kazdy dle svych
konkretnich potreb nakompiluje rovnou do programu.
ad datove breakpointy:
Mam predstavu, ze breakpointy budou vyhodnocovany za kazdou vykonanou
instrukci, coz znamena, ze budou reagovat na to co se stalo - nikoliv na
to, co se prave chysta stat. Pokud bych chtel podle datoveho breakpointu
najit napr. misto, ktere mi prepisuje zasobnik, nebo misto ktere mi
zapisuje do portu 0xCE nejakou hodnotu, tak se bud budu muset spokojit s
vykonanim breakpointu bezprostredne po teto udalosti. To se navic trochu
komplikuje tim, ze kdyz napr. v danou chvili jeste prijde interrupt, tak
tim nasledujicim radkem bude az prvni instrukce v prerusovaci rutine,
coz bude trochu zavadejici.
K tomu, aby se tohle nejak hezky vyresilo by jsme asi museli do
umulatoru zabudovat pred kazdou instrukci nejakou predikci toho co se
stane a nebo implementovat nejaky rollback, ktery nas vrati o par gdg
taktu zpet pokud byla identifikovana nase udalost.
Na druhou stranu tento problem se asi tyka jen akce "STOP". Pokud by
jsme tu udalost chteli jen zalogovat, tak k tomu mame v danou chvili
vsechny potrebne informace a do logu by jsme umeli zapsat adresu na
ktere se vyskytovala nami hledana instrukce.
Rozhodne s tim vsim bude jeste hodne veselo :)
Michal
Dne 1.10.2015 v 9:43 Hynek Sladky napsal(a):
> To bude pekne slozity stroj :-)
>
> Pro ruzne analyzy by se jako akce mohlo hodit logovani do souboru bez
> zastaveni programu.
>
> Take by se mohl hodit datovy breakpoint: pri zapisu nebo cteni konkretni
> adresy nebo portu, pripadne pokud by slo rozlisit, zda to je 8- nebo
> 16-bitovy pristup H/L bytu (v pripade pameti).
>
> Pro ladeni aplikaci by se mohl hodit breakpoint na pristup do urcene
> oblasti pameti nebo naopak mimo urcenou oblast pameti (preteceni/podteceni).
>
> Hynek Sladky
>
>
> Dne 1.10.2015 9:08, Michal Hucik - ORDOZ napsal(a):
>> Adresa:
>>
>> Zakladni breakpoint je urceny konkretni adresou na ktere dojde k zastaveni.
>>
>> Akce:
>>
>> Nejbeznejsi akci breakpointu by melo byt STOP. Dalsimi moznostmi je
>> vykonani nejake sequence operaci: prirazeni obsahu registru, variables,
>> pameti, ci nastaveni periferii.
>>
>>
> _______________________________________________
> SharpMZ mailing list
> SharpMZ na mail.ordoz.com
> http://mail.ordoz.com/mailman/listinfo/sharpmz
>
Další informace o konferenci SharpMZ