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ší...


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)]