Stránka 2 z 2

Napsal: 13 bře 2021, 21:39
od mihal
Ten procesor má spoločný adresný priestor a napríklad v tej subrutine pravdepodobne číta hodnotu z portu, na 0x0001 je PortA. Je ale kľudne možné že sa ti niekde posunul bajt a namiesto inštrukcie čítaš ich data. To by zodpovedalo tomu úseku kódu kde sa presúva hodnota z registra do registra bez nejakej náväznosti.
Ďalej musíš počítať s tým, že niektoré registre môže čítať cez DMA nejaký ďalší ďas a to že tam niečo zapíšeš a o chvíľu to prepíšeš môže mať nejaký ďalší význam, napríklad odblokovanie niečoho.
To spätné dekódovanie pri tak zložitom procesore neni úplne triviálne a potrebuješ poznať jeho vrtochy, inak nad tým stráviš mesiace.
Dúfam že to neni nejaká blbá RJ za pár stoviek €,

Napsal: 13 bře 2021, 22:28
od Bernard
Nějak matně si vzpomínám, že i překladač zdrojového kódu může generovat nějaké zbytečné instrukce. V MCS-51 byl na to nějaký "odžmolkovací" program Lint, který ty zbytečnosti čistil. Tenkrát přišel každý ušetřený bajt programu vhod, aspoň občas.

Napsal: 14 bře 2021, 01:51
od samec
Nemám disassembler, len plošák, multimeter, výpis externej ROM a datašit k procesoru. Na adrese 0 začína program po zapnutí. To 0x0001 v subrutine nie je adresa, ale priame dáta. Procak nemá DMA. RAM je externá. Periférie môžu prepísať len data v RAM, nie procesorové registre. Samozrejme čarovať sa dá so všeličím, ale ten HW okolo nie je zas až tak inteligentný. Zatiaľ som prešiel asi 500 bajtov z 50kB. Na začiatku programu som našiel inicializáciu riadiacích registrov pre organizáciu pamätí a čip selektov a register ochrany (watchdog atď...). Potom prišli tie nezmyselné inštrukcie. Skúsil som vliezť cez chybové prerušenie a v nejakom bordeli som našiel volanie subrutiny na resetovnie watchdogu. Skúsil som ďalšie HW prerušenie a tam sa pomedzi bordel nastavujú nejaké bity výstupných portov. Najzložitejšie je rozlúštiť nejasnosti okolo príliš stučného popisu inštrukcií, napríklad čím sa doplní extended adresa na 20 bitov, alebo či sa offset ráta so znamienkom alebo bez. Tiež neviem, čo sa stane, keď nejaká nezmyselná inštrukcia chce zapisovať do ROM, či sa vyvolá nejaké chybove prerušenie alebo nič. Ešte sa trochu povrtam v tom kóde a potom asi skúsim pripojiť na zbernicu arduino a porovnať, či program beží tak ako to vidím v kóde.

Napsal: 14 bře 2021, 13:19
od lesana87
samec píše:Nemám disassembler.
Tak to by nějaký chtělo.

Napsal: 03 dub 2021, 13:10
od samec
Čo sa stane, ak na EXTAL vstup pripojím externý zdroj impulzov z Arduina? Pokazím kryštál? Schéma je na strane 49.
https://www.nxp.com/docs/en/product-bri ... 16Z1TS.pdf

Napsal: 03 dub 2021, 23:04
od mihal
EXTAL je vstup externých hodín. Kryštál by som odpojil.

Napsal: 04 dub 2021, 12:17
od samec
Práve že ja nechcem nič odpájať. Nemám na to čas ani chuť, lebo ani neviem, koľko krát to budem musieť takto prepájať a potom naspäť do pôvodného stavu. Ale už asi viem, čo urobím. Privediem impulzy na oba vývody kryštálu súčasne.

Mám však iný problém. Narazil som pri lúštení kódu na nejasnosť. Prarameter inštrukcie BPL Branch if Plus je signed alebo unsigned?
(strana 131 v pdf, alebo strana 6-63 v texte)
https://www.nxp.com/docs/en/reference-m ... PU16RM.pdf

Napsal: 04 dub 2021, 12:28
od termit256
Kdyz to nechces odpojovat, tak nechapu co tu resis.

Napsal: 04 dub 2021, 13:33
od samec
Predsa ako bez odpojenia kryštálu ho nezničiť externým zdrojom impulzov.

Napsal: 04 dub 2021, 21:47
od mihal
BPL skáče o offset ak bit N v CCR je 0. Nieje signed ani unsigned ale simple.