Forum

From PMD 85 Infoserver

Jump to: navigation, search
:: back to start of topic :: back to topic list ::
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2017-07-15 10:36:33 AM
Subject  Subject ::  Re: Počitadlo taktů CPU v emulátoru
V pracovnej verzii emulátora 3.0.1.142 je vyšší počet Taktov daný zohľadňovaním brzdenia CPU Video-procesorom podľa analýzy Tomáša Pecinu. Nemalo by záležať na tom, či sa trasuje po inštrukciách, cez volania CALL, alebo za normálneho behu a počet taktov by mal byť rovnaký. Aj v Profileri.
Pri tejto analýze Tomáš Pecina vytvoril program, ktorý overoval skutočné trvanie inštrukcií, ak sa nemýlim, počítaním taktov za pomocí časovača. Tento program som spúšťal aj na reálnom PMD 85 a aj v Emulátore s upraveným počítaním taktov a výsledok bol rovnaký.
Netvrdím ale, že ešte stále nemôže byť niekde nejaká chyba. Či už v Emulátore alebo v danom testovacom programe (kde ho vôbec mám?...).
 
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2017-07-18 10:27:34 PM
Subject  Subject ::  Re: Počitadlo taktů CPU v emulátoru
Všetko je asi/nejako/celkom inak... A som z toho rozhodený a "mierne" demotivovaný :-(
Spomínaný program Tomáša Pecinu (mnou mierne upravený a učesaný)
timing-pmd-full.ptp
timing-pmd-full.a8080
dáva rozdielne výsledky na reálnom PMD 85, v RM-TEAM Emulátore a aj v ePMD85 Zdeňka Šestáka.
Na reálnom PMD 85 som to spúšťal na modeloch 2A a 3 a oba dávali identický výsledok.
Určenie trvania inštrukcie nie je exaktné pre jednotlivú inštrukciu a je riešené takto:

        mvi  a,0
        out  c1
 
pre:    ds   1   ; NOP alebo MOV B,B
ins:    ds   1   ; kod samotnej instrukcie
post:   ds   2   ; argument instrukcie
 
cont:   in  c1
        cma

Na začiatku sa "vynuluje" časovač a vykoná sa NOP alebo MOV B,B (pre), čím sa testovaná inštrukcia posúva na párny/nepárny takt. Vykoná sa samotná inštrukcia (ins) a ak je to 1 alebo 2 bytová inštrukcia, tak sa za ňou vykonajú 2 alebo 1 NOP (post). U inštrukcií CALL a RST k tomu patrí aj "návrat" z volanej rutiny. Nakoniec sa prečíta hodnota čítača.
Získaná hodnota tak zahŕňa (pre) inštrukciu, testovanú inštrukciu, dodatočné NOPy a zrejme aj "časť" IN/OUT čítača. To by ale asi ani nevadilo.
Podstatné je, že tie rozdiely hodnôt emulátorov od originálu sú často diametrálne odlišné. Takže je pravdepodobné, že jednak je chyba v definícii Taktov pre jednotlivé inštrukcie a (možno hlavne) v emulácii i8253.
Naviac mám obavy, že pri nulovaní čítača a čítaní jeho obsahu, nie je úplne jasné, v ktorom takte pri vykonávaní IN/OUT sa daná operácia udeje. Teoreticky by to malo byť pred posledným taktom (alebo počas), ale tie hodnoty tomu nejako nezodpovedajú, alebo sa na to pozerám úplne zle.
A vôbec, keďže emulátor (aspoň ten náš) inkrementuje počítadlo taktov naraz po vykonaní inštrukcie, tak prakticky nemôže čítanie hodnoty čítača vrátiť reálnu hodnotu...

Suma-sumárum, ak budem brať rozdiely výsledkov testovacieho programu vážne, tak môžem konštatovať, že emulátor "časuje" inštrukcie nesprávne...
 
Message
Author  Author ::  Zdeněk
Posted  Posted ::  2017-07-19 08:23:24 AM
Subject  Subject ::  Re: Počitadlo taktů CPU v emulátoru
Jak jsem zkoušel měřit instrukce podle i8253 (na reálném PMD):
nejprve jsem změřil, kolik si vezme zbytek IN/OUT:

xra a
out c1
in c1
mov b,a

Tento rozdíl jsem pak odečítal od vkládaných instrukcí:
xra a
out c1
nop ; testovaná instrukce
in c1
sub b

Zkoušel jsem i různé kombinace dvou instrukcí s lichým taktem (mov) + sudým, abych "rozhodil" VIDEO a vždy se mi potvrdil předpoklad, že každá instrukce si vezme sudý počet taktů (byť jeden takt je TW v T1 následující instrukci). Návíc jsem časování pár instrukcí sledoval i v logickém analyzátoru. Ještě vyzkouším ten program pana Peciny, proč nemám stejné takty v ePMD oproti reálnému PMD. I když už teď vidím, že tabulka taktů se mi liší ve zdrojácích ePMD právě u instrukce IN (má být 12, teď mám 10).
 
Message
Author  Author ::  Libor L.A.
Posted  Posted ::  2017-07-18 10:42:00 PM
Subject  Subject ::  Re: Počitadlo taktů CPU v emulátoru
Viděl bych to asi následovně: Drtivé většině obou našich národů je to jedno. A my, co píšeme programy pro PMD-85 budeme o těchto rozdílech vědět a nebudeme psát programy tak, aby striktně trvaly na časování instrukcí CPU, 8251, 8253 a rychlosti vzorkování zvuku a... Prostě to beru tak, že emulátor funguje na 99,99%. Vzato do důsledku, ony ani jednotlivé verze PMD nebo klony ZX Spectra nejsou úplně totožné z hlediska hardware samy mezi sebou. Míra složitosti emulátoru a tím i věrné napodobení originálu má vždy své meze.

Spíše mě to zajímalo pro potvrzení určité pracovní hypotézy, abych našel přesný princip pro časování UARTem. Což se povedlo (díky vám oběma). A to, jestli výsledek pojede na emulátoru o 1 nebo 5% pomaleji či rychleji to už není podle mne zase až tak důležité.
:: back to start of topic :: back to topic list ::