Konference: Počítač SHARP MZ-800 a emulátory
Od: | Roman Dolejsi |
Datum: | 24.9.2007 09:28 |
Předmět: | Re: dalsi vyvoj emulatoru |
21.9.07, Miroslav Hajda (sharpemu tu byla ta zakroucena vec pandora.cz) <bomi tu byla ta zakroucena vec centrum.cz>:
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 tu byla ta zakroucena vec ordoz.com
> Datum: 21.09.2007 13:47
>
>Miroslav Hajda ( sharpemu tu byla ta zakroucena vec pandora.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ší...
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 tu byla ta zakroucena vec ordoz.com
> Datum: 21.09.2007 13:47
>
>Miroslav Hajda ( sharpemu tu byla ta zakroucena vec pandora.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
Ostatní příspěvky vlákna:
[2007/1 (22)] [2007/2 (7)] [2007/3 (14)] [2007/5 (3)] [2007/7 (5)] [2007/8 (4)] [2007/9 (56)] [2007/10 (44)] [2007/11 (40)] [2007/12 (6)]
[1999 (1)]
[2000 (168)]
[2001 (733)]
[2002 (459)]
[2003 (654)]
[2004 (224)]
[2005 (105)]
[2006 (182)]
[2007 (201)]
[2008 (294)]
[2009 (363)]
[2010 (782)]
[2011 (522)]
[2012 (642)]
[2013 (442)]