ASM z HEX
Moderátor: Moderátoři
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 €,
Ď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 €,
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.
Č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
https://www.nxp.com/docs/en/product-bri ... 16Z1TS.pdf
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
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