Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Původní podoba příspěvku

Michal Hucik - ORDOZ <ordoz@[doména skryta]> Zpět na příspěvek

Surová data tak, jak byla v roce 2013 stažena z Pandory (HTML zdroj bez úprav, osobní e-mailové adresy jsou maskované).

<pre>
Ahoj Zdenku,

tak jsem schvalne zkusil 3600 Bd a bez potizi se to nacte jak v te 
otrocke, tak i v te rychle verzi ... tedy samozrejme pokud pred tim 
nedojde k tomu zminenemu hazardu.

Nicmene - rika se, ze dobre polozena otazka je nekdy pro tazatele 
zaroven cestou odpovedi :) V tomto pripade spise jen castecne, ale uz 
asi vim, kde hledat. Zkusil jsem si nakompilovat otrockou - pomalou - 
verzi, ktera odpovida tomu co je vydano jako rev. 1.0.3. Zkusil jsem cca 
30x po sobe nahrat zavadec Interkarate+ a naprosto ve vsech pripadech 
jsem pri prhodu na adresu 0x1535 mel v regR hodnotu 0xb7 - program se 
vzdy nacetl spravne.

Nasledne jsem se pokusil o to same s tim, ze jsem si nakompiloval 
rychlou verzi CTC0 a zkousel jsem nahodnym nahravanim loaderu 
zreprodukovat na te adrese chybu s tou hodnotou 0xb6 ... Nekdy se mi ji 
povedlo dosahnout hned napoprve. Nekdy az na 12 pokus.

Je to tedy spise jen takova pocitova statistika, ale vse smeruje k tomu, 
ze i kdyz program na CTC0 nesaha, tak je jim ovlivnen - resp. je jim 
ovlivneno chovani emulovaneho PIOZ80. Pokud by sis nahodou vzpomnel, zda 
tve experimenty dospely ke stejne pricine zboreni programu - tedy 
promenliva delka trvani bloku, ktery ceka na Interrupt, tak jsme zrejme 
oba v te pocitane verzi CTC zapomneli na neco, co v otrocke variante CTC 
ovlivnuje chovani obvodu PyjusZ80.

Michal

Dne 26.10.2016 v 14:10 zdeneka@[doména skryta] napsal(a):
&gt; Michale,
&gt;
&gt; někdo už se v tom určitě hrabal  :-D Více méně jsem dospěl k tomu samému co
&gt; Ty. Navzdory veškeré teorii mám ale pocit, že na skutečném železe to chodí
&gt; naprosto spolehlivě :-) A co víc, oproti mému emulátoru ten loader přímo na
&gt; Sharpovi zkousnul myslím i rychlost 3600 Bd.
&gt;
&gt; Zdeněk
&gt;
&gt;
&gt;
&gt; From: Michal Hucik - ORDOZ
&gt; Sent: Wednesday, October 26, 2016 2:05 PM
&gt; To: Počítače SHARP MZ a jejich emulátory
&gt; Subject: [SharpMZ] Adolf z Interkarate+
&gt;
&gt;
&gt; Ahoj,
&gt;
&gt; nedavno jsem do SVN poslal upravu emulatoru ve ktere se uz otrocky
&gt; nevykonava kazdy takt 1M1 hodin (zdroj pro CTC0). Kratce na to mi Jirka
&gt; Cervinka reportoval, ze mu s touto upravou obcas nefunguje nahravani
&gt; vicedilne verze Interkarate+.
&gt;
&gt; Poprve jsem se tedy pustil do analyzy tohoto loaderu, hrabal jste se v nem
&gt; uz nekdy nekdo? Hned na jeho zacatku mam pocit, ze jeho fungovani je
&gt; zalozeno na hazardnim vztahu. Pro zajimavost to posilam sem:
&gt;
&gt;
&gt; 1. Start programu je na 0x14f3, nasleduje pomerne kratky kod ve kterem si na
&gt; adrese 0038 pripravime rutinu interruptu:
&gt;
&gt; 0x0038:
&gt; ld b,xx (xx na adrese 0x0039 se bude prepisovat na 0x83)
&gt; djnz -2
&gt; ei
&gt; reti
&gt;
&gt;
&gt; Do regA ulozime 0x83. Tuto hodnotu zapiseme i na (0x0039). Nasledne se
&gt; nastavi IM 1, v PIOZ80 se povoli interrupt od VBLN a v HALTu cekame na
&gt; prichod interruptu.
&gt;
&gt; 2. Prijde interrupt, na 0x0038 si odkroutime ty DJNZ, pak do regR ulozime
&gt; obsah regA a zpet precteme do regA - vykonaly se 2 optokody, takze regA se
&gt; tim zvednul na hodnotu 0x85.
&gt;
&gt; 3. Nasleduje prvni kratky decryptovaci blok, ktery provadi XOR (HL). Vzdy
&gt; pred XOR se do regA nacte obsah z regR. Decryptuje se od 0x1534 do 0x1561.
&gt;
&gt; 4. Jsme na adrese 0x1534, kde se nachazi jiz dekryptovany kod. Prvni
&gt; instrukci je HALT. Tedy cekame na prichod nasledujiciho VBLN interruptu od
&gt; PIOZ80. Ve chvili, kdy jsme vstoupili na 0x1534 byla hodnota regR = 0x98. S
&gt; kazdym vykonanym HALT se nam regR zvysi o 1. Po prichodu interruptu si
&gt; odskocime opet na 0x0038.
&gt;
&gt; 5. Po navratu z interruptu jsme na adrese 0x1535 a hodnota regR je 0xb7,
&gt; nebo 0xb6 - coz je ten hazard o kterem jsem psal v uvodu. Myslim si, ze
&gt; duvodem toho rozdilu je ten fakt, ze i kdyz mezi jednotlivymi VBLN je
&gt; konstantni pocet taktu, tak diky tomu, ze nelze vyvolat interrupt uprostred
&gt; instrukce, tak se obcas muze stat, ze se pocet vykonanych optokodu o jeden
&gt; lisi.
&gt;
&gt; 6. Skocime na 0x1558. nastavime regHL=0x15b6.
&gt;
&gt; 7. Na adrese 0x155b: regA = regR, zapiseme jej do (HL=0x15b6) a snizime HL.
&gt; V nekonecne smycce skaceme z 0x155f: JR 0xfa zpet na 0x155b a se zapisem po
&gt; jednom bajtu postupujeme az k neodvratnemu prepisu adresy 0x1560, cimz se
&gt; zmeni parametr toho JR.
&gt;
&gt; 8a. V pripade, ze jsme v bode 6 meli v regR hodnotu 0xb7, tak na 0x1560
&gt; zapiseme 0xe9, coz znamena 0x155f: JR 0x154a. Tam je LDIR, ktery 0x0300
&gt; bajtu z 0x1200 nakopiruje do 0x0000. Program zije.
&gt;
&gt; 8b. V pripade, ze jsme v bode 6 meli v regR hodnotu 0xb6, tak na 0x1560
&gt; zapiseme 0xe9, coz znamena 0x155f: JR 0x1549. Tam je RST 0x00. Za
&gt; &quot;normalnich&quot; okolnosti, kdy je pocitac ciste nastartovan a ma implicitni
&gt; obsah RAM, tak se zde nachazi 0x0000: RST 0x38.
&gt;
&gt;
&gt; Prozatim se mi moc nechtelo dal zkoumat, co se deje dal za bodem 8b. Je
&gt; zrejme, ze nez k necemu takovemu dojde, tak program nemanipuluje se
&gt; zasobnikem (tedy nevyuziva vedome moznosti projit pres RETI a zbrchat se) a
&gt; ani nenastavuje zadny vlastni obsah na adrese 0x0000.
&gt; V pripade, ze jsem uz jednou Interkarate loader nacetl spravne a dam reset.
&gt; Pak znova nahraju zavadec Interkarate, tak je obsah na adrese 0x0000 natolik
&gt; destruktivni, ze je program vetsinou uiplne v haji.
&gt; V pripade,  ze program projde pres RETI, tak se zda, ze nejakou nahodou,
&gt; ktera mozna sekundarne trochu souvisi s nejakou operaci s CTC dojde ke
&gt; zbrchani vykolejeneho zavadece a program nacte s drobnymi deformacemi
&gt; screen, ktery nasleduje v dalsim CMT bloku.
&gt;
&gt; Zkusim to jeste dale zkoumat, protoze je taky dost mozne, ze ten hazardni
&gt; stav nastava jen v emulatoru a pak by bylo potreba pustit se znova do
&gt; pruzkumu spravneho chovani obvodu PIOZ80 :(
&gt;
&gt; Michal
&gt;
&gt;
&gt;
&gt; _______________________________________________
&gt; SharpMZ mailing list
&gt; SharpMZ@mail.ordoz.com
&gt; http://mail.ordoz.com/mailman/listinfo/sharpmz
&gt;
&gt; _______________________________________________
&gt; SharpMZ mailing list
&gt; SharpMZ@mail.ordoz.com
&gt; http://mail.ordoz.com/mailman/listinfo/sharpmz
&gt;

</pre>