21.9.07, Miroslav Hajda (sharpemupandora.cz) <bomi[doména skryta]>:
Předně si cením toho, že se tu po dlouhé době oběvil i příspěvek k tématu, kvůli kterého byla původně tato diskuze založena... ;-)
______________________________________________________________
> Od: ordoz[doména skryta]
> Datum: 21.09.2007 13:47
>
>Miroslav Hajda ( sharpemupandora.cz) napsal(a):
>> Svého času jsem se také chtěl zapojit do vývoje Zdeňkova emulátoru a
>> kromě některých funkcí jako například vykreslovaní bez DirectX (tehdy
>> kvůli Wine) a bez borderu jsem se rozhodl zkusit rozdělit emulátor na
>> samostatná zařízení (tedy bod 3), která by se k hlavní aplikaci
>> připojovala ve formě modulů... Bohužel jsem tehdy (kromě zpomalení
>> vykreslování) narazil v Delphi na až příliš obtížně překonatelné překážky
>> souvisejícími s bugem RecreateWND... :-(
>>
> Rozdeleni emulatoru na jednotlive periferie je asi prece jen trochu neco
> jineho, nez uvadim v bodu 3. Videl bych to spis tak, ze si v konfiguraci
> emulatoru zaregistruju nejaky socket, do ktereho pak bude emulator v
> taktech posilat obsah MZ sbernice. Jakykoliv externi proces pak muze na
> tomto socketu poslouchat a odpovidat, s tim, ze samozrejme musi akceptovat
> interni hodiny - vse je samozrejme hodne zavisle na tom jak to vlastne nyni
> vypada uvnitr emulatoru.
V mém případě šlo přesně o to, co zde popisuješ... Jednotlivé moduly si měly registrovat obsluhu portů, části paměti, případně obsahy registrů atp. Cílem bylo umožnit jejich vzájemnou zaměnitelnost a tedy možnost dalšího vývoje bez nutnosti zásahu do hlavního jádra a to včetně vývoje v jiných programovacích jazycích... Podobné cíle měl tehdy se svým emulátorem tuším i Roman Dolejší...
Ahoj,
mas Mirku pravdu, moje MCE presne takhle funguje. V principu se jedna o cisty modularni framework, ve kterem je vse (CPU, sbernice, periferie) reprezentovano v podobe modulu a jeho vstupne-vystupnich interface. Kazdy modul definuje, co vyzaduje za okolni interface a sam nejaky interface implementuje.
Ve finale to tedy vypada tak, ze CPU ke sve praci potrebuje pametovy a portovy radic. Pametovy radic ma pripojenu pamet, portovy radic ma do sebe zaregistrovane 'periferie'.
Kazda periferie (opet modul) je realizovana jednoduchou tridou, ktera odpovida pouze na getMemory() a setMemory() prikazy a vetsinou rozeznava jen par spodnich bitu adresy. Takovou periferii pak muzete pripojit kamkoli.
Vysledna struktura emulovaneho pocitace je 'slepena' az pri startu podle konfiguracniho souboru (ve formatu XML). Tam pamet a periferie pripojite na spravna mista (v pametovem ci portovem prostoru) a pametovy a portovy radic pak pripojite k CPU.
Vsechny emulace dostupne v MCE tak casto vyuzivaji spolecne tridy na realizaci periferii - napr. Disciple na ZX i standardni floppy na Sharpu pouzivaji WD297x.java modul. Podobne to je i u casovace (I8254.java), CPU (Z80, i8080) a dalsich ..
Take podpurne moduly jsou casto vyhodne a znovupouzitelne - modul pro spravu a on-the-fly vymenu ROM obsahu, virtualni reprezentace floppy disku s podporou formatovani ci virtualni reprezentace pasky..
Ted nemam az tolik casu se emulatorem zabyvat, ale presto jsem byl v tomto roce uz schopen dodelat zakladni emulaci IQ-151, Ondry a dale vylepsovat obecne vlastnosti emulatoru. Mozna do konce roku uvolnim dalsi public verzi :-)
Kdyby mel nekdo chut, mohu zpristupnit popisy interfacu, dodelat 'javadoc' pro pozadavky dostupnych modulu a popis typicke konfigurace v XML - aby si kazdy mohl sestavit masinu podle vlastniho prani ;-)
Pripadne prime spolupraci se meze nekladou :-)
Nejake namety?
zatim,
Roman