Enterprise Forever  |  :HUN  |  Emulátorok  |  Topic: iEP128emu
Author Topic: iEP128emu  (Read 1673 times)« previous next »
varrogy
User
*
Offline Offline

Posts: 65


OS:
Mac OS X
Browser:
Safari


View Profile
New Posts
« on: 2012.January.16. 00:06:04 »

Sziasztok!
A fórumon már többször felmerült (jogosan), hogy miért nem létezik Android, iOS, stb... eszközökre Enterprise emulátor. De nézzük sorra miért is van ez, mi az oka ennek és merre fele lehetne tovább lépni, hogy közelebb kerüljünk a megoldáshoz.
A fórumon alapvetően két Enterprise emulátor találhatunk.
Az EP32 amely Windows desktop platformon fut és Visual C++ fejlesztő környezet használatával készült. A másik pedig az ep128emu ami “elvileg” platform független, mivel nagyrészt C++ ban készült.
Mind a két emulátort tanulmányoztam forráskód szinten is, legutóbb az ep128emu-t forgattam le OSX platformra. Annak idején pedig az EP32-bekerült egy két apróbb fejlesztésem, melyet EGZO kolléga is megemlít. Amelyet ezúton is köszönök neki!

De nézzük mik azok az akadályok ami miatt nem tud elkészülni az iOS vagy Android változat?

1. Függőségek
Nézzük először az EP32-őt. Az EP32 teljes egészében a Microsoft által készített keretrendszereire épül. A képernyő megjelenítéshez a DirectDraw-t, a hanghoz  a WaveOut és DirectSound a billentyűzet kezeléshez pedig a DirectInput APIket használja a floppy és egyéb fájlműveletekhez pedig a Win32 SDK-t. Innentől kezdve gyakorlatilag ennek a szoftvernek egy iOS mutációjához újra kellene írni a forráskód ~80%-át.

De térjünk rá az ep128emu-ra amely alapvetően Linux alá/alatt készült, de könnyen leforgatható és tökéletesen működik Windows és OSX környezetekben is. Hogyan lehet ez és akkor miért nem lehet 10 perc alatt leforgatni iOS-re vagy Androidra?
A válasz a felhasznált könyvtárakban (SDK) keresendő! Egy alap funkciókkal rendelkező ep128emu-hoz szükség van a libsndfile, portaudio, fltk könyvtárakra, néhány esetben pl kellhet még LUA és SDL is. Ezek a könyvtárak széleskörben használatosak és elsősorban desktop számítógépekhez készültek ez utóbbi kettő (LUA és SDL) már létezik mobil eszközökre is, de sajnos az libsndfile, portaudio és az fltk egyelőre nem és a jelenlegi forrás ezekre támaszkodik.

2. Kezelőfelület
Itt a kérdés, mire is szeretnénk használni az emulátorunkat egy Android vagy iOS eszközön? Első ötletem a demók futtatása és a játékok lennének, de ez csak az én véleményem. A kezelőfelületet ennek fényében kell újra alkotni a kisebb telefon felbontásra illetve a táblagépek kijelzőjére. Ezzel el lehet lenni, de ha már megy az emuláció akkor kezelőfelületet lehet igazítgatni.

Mi lehet a megoldás?
A böngésző! (Javascript + HTML5)

Felmerül a kérdés, hogy mi ez a hülyeség, hogyan lehet ilyet egyáltalán mondani???
De mégis, nem kevés Webes alkalmazás fut már világszerte (pl. Angry Birdsnek is van ilyen változata) és akkor még nem is említettük a Chrome OS-t ahol minden program a böngészőben fut.

Előnyei:
Platformfüggetlen megoldás
Online lehetne játszani az EP-s játékokat
Nem kell leforgatni az a forráskódot

Hátrányai:
Nagyobb erőforrásigény
Régebbi böngészőkben nem biztos hogy fog futni

És amiért úgy gondoltam, hogy összefoglalom ezeket infókat az az volt, hogy találtam egy javascriptben írt ZX Spectrum emulátort az http://ispeccy.com/ mely opensource és az ep128emu Z80 emulációjának alapjául szolgáló C++ library-t használták fel. Talán ezt a projektet alapul véve és az ep128emu forrását felhasználva el lehet kezdeni egy böngésző alapú emulátor projektet. Mit gondoltok?

 ds_icon_redface bocs ha már erről volt itt szó és azért is ha egy kicsit hosszú lett!

Üdv,
Gyuri
Logged

Enterprise Forever
« on: 2012.January.16. 00:06:04 »

 Logged

endi
EP addict
*
Offline Offline

Hungary

Posts: 1000


OS:
Windows XP
Browser:
Opera 9.80


View Profile WWW
New Posts
« Reply #1 on: 2012.January.16. 12:27:56 »

Szerintem nem kell keretrendszer. Sőt, egyszerűen annyit tudjon hogy előre beállított-bekonfigolt programokat futtat. Azaz az user csak rányom egy linkre és játszik pl. a Batman-al.
Miért jó ez? A legtöbb usert csak ez érdekli. Ha több érdekli, majd a többi emut használja.
Sőt. A legtöbb emut szerintem sok régi EP-s azért nem használja mert nincs ideje foglalkozni azzal hogy megtanulja a használatukat. Meg is értem őket, én is így vagyok már egy ideje.
De ezek az userek szívesen megnéznének játékokat, demókat. Ha weben futtatható emu lenne, szerintem csak erre használnák.
Logged


lgb
EP fan
*
Offline Offline

Hungary

Posts: 188


OS:
Linux
Browser:
Safari


View Profile WWW
New Posts
« Reply #2 on: 2012.January.16. 14:12:44 »

Szerintem nem kell keretrendszer. Sőt, egyszerűen annyit tudjon hogy előre beállított-bekonfigolt programokat futtat. Azaz az user csak rányom egy linkre és játszik pl. a Batman-al.
Miért jó ez? A legtöbb usert csak ez érdekli. Ha több érdekli, majd a többi emut használja.
Sőt. A legtöbb emut szerintem sok régi EP-s azért nem használja mert nincs ideje foglalkozni azzal hogy megtanulja a használatukat. Meg is értem őket, én is így vagyok már egy ideje.
De ezek az userek szívesen megnéznének játékokat, demókat. Ha weben futtatható emu lenne, szerintem csak erre használnák.

Sot ... Mas (vice [commodore xyz], ep128emu, stb) kapcsan mar regen gondolkoztam azon, hogy lehetne egy olyan lehetoseg (igaz, ezt meg "sima" desktop PC-nel gondoltam), hogy egy szem file-t nyit meg az ember gyereke, es az tartalmaz config-ot, betoltendo esetleges ROM-okat (vagy arra vonatkozo eloirast), emulalando extra hw-ket, stb, es magat a software-t is, amit futtatni kene (legyen ez disk image, vagy barmi). Ugyanis gyakran gond, hogy adott valami, ami kicsit is extra cfg-t kivan, akkor egy orokkevalosag, mire az ember beallit mindent ugy, aztan maskor meg megint kezdheti elolrol, ha legkozelebb nezi (vagy egyeb trukk kell, cfg elmentese adott neven, miegymas). Mennyivel szebb lenne, ha egy szem file-ban lenne minden megmondva az emunak, raadasul ez pl kulon elony lenne egy olyan esetben, mint az okostelefon, ahol amugy is nehezkesebb azert a fel vilagegyetemet atconfiguralni minden alkalommal.

Ha igy mukodne, nem is kene semmi cfg lehetoseg magaba az app-ba. Max desktop OS-re lehetne egy cfg editor, ha valaki ossze akar allitani valamit, amit aztan hasznal. Persze a szep az lenne, ha ezt tobb emulator is megertene, igy tobbe-kedvesbe standard eljaras lenne, legalabb egy adott emulator "tobb verzioja" kozott, ha mas nem is - pl ep128emu for iPhone/Android and desktop "edition"
Logged

Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5241


OS:
Windows XP
Browser:
Firefox 9.0.1


View Profile WWW
New Posts
« Reply #3 on: 2012.January.16. 14:38:04 »

egy szem file-t nyit meg az ember gyereke
ep128emunál erre jó a snapshot fájl.
Logged


varrogy
User
*
Offline Offline

Posts: 65


OS:
Mac OS X
Browser:
Safari


View Profile
New Posts
« Reply #4 on: 2012.January.16. 16:25:40 »

ep128emunál erre jó a snapshot fájl.

így van,
ha jól tudom a snapshot elvileg kiváltja még a romok betöltését is?
Logged

szipucsu
EP addict
*
Offline Offline

Hungary

Posts: 2715


OS:
Windows XP
Browser:
Firefox 9.0.1


View Profile WWW
New Posts
« Reply #5 on: 2012.January.16. 16:59:43 »

ha jól tudom a snapshot elvileg kiváltja még a romok betöltését is?
Én is így tapasztaltam, és újabb indításnál újra a régi beállításokra fog emlékezni az emu, tehát nem kell visszaállítgatni se.
Logged

Az EP jobb volt, mint a PC, nem volt hirtelen kikapcsolás után scandisk, és nem kellett újratelepíteni a Windows-t, kék képernyő pedig legfeljebb a DOS ablakban volt, az is más funkcióval.

IstvanV
EP addict
*
Offline Offline

Posts: 2080

OS:
Linux 64 bit
Browser:
Firefox 5.0


View Profile
New Posts
« Reply #6 on: 2012.January.16. 17:58:45 »

ha jól tudom a snapshot elvileg kiváltja még a romok betöltését is?

Igen, a snapshot tartalmazza a ROM-okat, a demo file-ok pedig a CPU és egyéb órajelek konfigurációját is.
A snapshot vagy demo betöltéssel módosított hardver konfiguráció visszaállítható a "Reset machine configuration" (Shift + F11) segítségével.
Logged

IstvanV
EP addict
*
Offline Offline

Posts: 2080

OS:
Linux 64 bit
Browser:
Firefox 5.0


View Profile
New Posts
« Reply #7 on: 2012.January.16. 18:27:49 »

Talán ezt a projektet alapul véve és az ep128emu forrását felhasználva el lehet kezdeni egy böngésző alapú emulátor projektet. Mit gondoltok?

Csak a hardver emuláció forráskódját használva elkerülhetők a függőségek, így azonban természetesen újra meg kell valósítani a video és audio kimenetet, a billentyűzet kezelését, és a felhasználói felületet. A libep128emu.a, libz80.a, libep128.a, libzx128.a, és libcpc464.a forrás file-jait kell használni (illetve az utóbbi kettőt nem, ha elég csak az EP emuláció, de a többi gép támogatását nem nehéz beépíteni). A libep128emu.a-ból kihagyhatók ezek: fldisp.cpp, gldisp.cpp, guicolor.cpp, joystick.cpp, script.cpp, és esetleg a vmthread.cpp is. Ezzel azonnal megszűnik az FLTK, OpenGL, SDL, és Lua függőség. A soundio.cpp és soundio.hpp néhány perces módosításával törölhető a libsndfile és PortAudio függőség is. Szintén kihagyhatók ezek: cfg_db.cpp, cfg_db.hpp, emucfg.cpp, emucfg.hpp - de így csak a dotconf függőség kerülhető el, ami egyébként is opcionális, és újra kell írni a konfigurációs file-ok kezelését.
Az új emulátornak meg kell valósitania az audio és video kimenetet (lásd soundio.hpp és display.hpp). Az emulátor interface a vm.hpp-ben található, erre épül az ep128vm.hpp, zx128vm.hpp, és cpc464vm.hpp. A használatának a lényege röviden. hogy a run() függvény hívásával az emuláció tetszőleges időtartama "futtatható" (az ep128emu-ban ez fixen 2 ms), és ezen hívások között lehet billentyűzet adatot küldeni, konfigurációt módosítani, debug műveleteket végezni, stb. a megfelelő függvények hívásával. A run() hívja az audio és video interface-t, amikor az adott típusú adat készen áll a megjelenítésre vagy lejátszásra. A video megjelenítőnek sor adat, és VSYNC be-/kikapcsolás eseményeket kell feldolgoznia. Az audio drivert az emuláció pufferelt hangminta adatokkal hívja, ennek a feladata egyben a valós idejű sebességre lassítás is, de ezt máshogy is meg lehet oldani.
Logged

varrogy
User
*
Offline Offline

Posts: 65


OS:
Mac OS X
Browser:
Safari


View Profile
New Posts
« Reply #8 on: 2012.January.17. 10:10:37 »

Ezzel azonnal megszűnik az FLTK, OpenGL, SDL, és Lua függőség. A soundio.cpp és soundio.hpp néhány perces módosításával

Köszi az összeíraást sokat segített!
Nézegettem a forrást és az lenne a kérdésem, hogy az OpenGL mennyire van ráeépítve ebben a kódban az FLTK-ra?
Mert az opengl igazábol maradhatna is.
 
Logged

IstvanV
EP addict
*
Offline Offline

Posts: 2080

OS:
Linux 64 bit
Browser:
Firefox 5.0


View Profile
New Posts
« Reply #9 on: 2012.January.17. 11:13:44 »

Itt egy "lebutított" forráskód csomag, GUI, FLTK, PortAudio, libsndfile, Lua, és SDL nélkül:
  * libep128emu2-2.0.9.1.7z (181.77 KB - downloaded 6 times.)
OpenGL-t továbbra is használ a gldisp.cpp és gldisp.hpp, ehhez azonban az ablakkezelést, ami eredetileg FLTK alapú volt, újra meg kell valósítani.
A cfg_db.cpp, cfg_db.hpp, emucfg.cpp, és emucfg.hpp használja a dotconf-ot.
A fenti forrás file-ok elvileg mind törölhetők, a kód többi része működik ezek nélkül is.
Néhány helyen még előfordulnak rendszerfüggő kód részletek (pl. system.cpp/hpp, és a Z80 emulációban a byte sorrendet felismerő #ifdef-ek).
Logged

lgb
EP fan
*
Offline Offline

Hungary

Posts: 188


OS:
Linux
Browser:
Safari


View Profile WWW
New Posts
« Reply #10 on: 2012.January.17. 15:49:44 »

ep128emunál erre jó a snapshot fájl.

Aha, koszi. Oszinten ez nem jutott volna eszembe, a snapshot hallatan nekem inkabb mindig az ugrik be, hogy "majd folytatom ott, ahol abbahagytam", es nem ez a funkcio Smiley Btw, akkor az egy file, amiben minden benne van? Csak mert fejlesztes soran gyakran jol jonne, ha a kerdeses file pl valami text formatum lenne, amiben pl betoltendo program megadhato mint hivatkozas (a kerdeses file path-ja), szerkesztheto konnyeden, stb. Persze egy okostelefonra nyilvan pont az "egy az egyben" jo, bar ott is erdekes lehetne, hogy pl egyes ROM-okra, file-okra stb mondjuk URL-el is lehetne hivatkozni a "config file-on" belul, igy nem kene mindegyikbe feltetlen mindent belezsufolni. Ok, leallok es elolvasom az emu hasznalati utasitasat (RTFM), mivel kiderul a vegen, hogy olyasmiket akarok, ami mar reg megvan, lasd pl snapshot file Smiley
Logged

varrogy
User
*
Offline Offline

Posts: 65


OS:
Mac OS X
Browser:
Safari


View Profile
New Posts
« Reply #11 on: 2012.January.17. 21:10:52 »

Itt egy "lebutított" forráskód csomag, GUI, FLTK, PortAudio, libsndfile, Lua, és SDL nélkül:
  [ *** Specified attachment missing ]
OpenGL-t továbbra is használ a gldisp.cpp és gldisp.hpp, ehhez azonban az ablakkezelést, ami eredetileg FLTK alapú volt, újra meg kell valósítani.
A cfg_db.cpp, cfg_db.hpp, emucfg.cpp, és emucfg.hpp használja a dotconf-ot.
A fenti forrás file-ok elvileg mind törölhetők, a kód többi része működik ezek nélkül is.
Néhány helyen még előfordulnak rendszerfüggő kód részletek (pl. system.cpp/hpp, és a Z80 emulációban a byte sorrendet felismerő #ifdef-ek).


Köszi!!
Ebben a kódban a VSYNC kezelés és a Frame rajzolás elvileg benne van az OpenGL-en keresztül?

A debugger szerint az alábbi fv. meghívásra kerül
void FLTKDisplay_::frameDone()

de a gldisp.cpp-be nem jut el a kód, ezt az ablakkezelőnek kellene meghívnia?

Gy

« Last Edit: 2012.January.17. 22:17:04 by varrogy » Logged

IstvanV
EP addict
*
Offline Offline

Posts: 2080

OS:
Linux 64 bit
Browser:
Firefox 5.0


View Profile
New Posts
« Reply #12 on: 2012.January.17. 22:20:46 »

Ebben a kódban a VSYNC kezelés és a Frame rajzolás elvileg az OpenGL-en keresztül rajzol?

Igen, a rajzolást nem töröltem, de ahhoz, hogy használható legyen, néhány részletet - pl. ablakkezelés - újra meg kell írni.

Quote
A debugger szerint az alábbi fv. meghívásra kerül
void FLTKDisplay_::frameDone()

de a gldisp.cpp-be nem jut el a kód, ezt az ablakkezelőnek kellene meghívnia?

Ezt az FLTKDisplay_::drawLine() hívja, máshol nem kell foglalkozni vele. Az FLTKDisplay_ az FLTKDisplay (az eredeti FLTK software video driver, amelyet töröltem) és OpenGLDisplay közös részeit tartalmazza, mint például a video és szinkron adatok feldolgozása. A nevével ellentétben valójában nem használ FLTK-t.
Logged

varrogy
User
*
Offline Offline

Posts: 65


OS:
Mac OS X
Browser:
Safari


View Profile
New Posts
« Reply #13 on: 2012.January.18. 09:17:32 »

Igen, a rajzolást nem töröltem, de ahhoz, hogy használható legyen, néhány részletet - pl. ablakkezelés - újra meg kell írni.

Ezt az FLTKDisplay_::drawLine() hívja, máshol nem kell foglalkozni vele. Az FLTKDisplay_ az FLTKDisplay (az eredeti FLTK software video driver, amelyet töröltem) és OpenGLDisplay közös részeit tartalmazza, mint például a video és szinkron adatok feldolgozása. A nevével ellentétben valójában nem használ FLTK-t.


Újabb kérdés  ds_icon_redface
Sikerült leforgatni kódot az openGL részlegesen portoltam opengl es-re és elindítja a vmThreadet amibe be is töltöttem egy snapshot filet.
úgy tűnik, hogy fut rendesen és időközönként be is billenti a VideoDisplay a haveFramesPending - változót!

Viszont az audió output sendAudioData callback nem hívódik meg soha ez pontosan mitől függ?
Elivleg ebben valahol kellene lennie egy buffernek amiben a hang adat van amit valamilyen formában ki kell írni az eszköz hangkimenetére.


Logged

IstvanV
EP addict
*
Offline Offline

Posts: 2080

OS:
Linux 64 bit
Browser:
Firefox 5.0


View Profile
New Posts
« Reply #14 on: 2012.January.18. 12:09:43 »

Itt egy nagyon kezdetleges példa program, ami betölti a "qs_ep128.dat" snapshot file-t az aktuális könyvtárból, és 10 másodpercig futtatja az emulációt. Hang és video van (Linux alatt legalábbis, más rendszeren nem teszteltem), billentyűzet kezelés nincs, nem használja a VMThread-et, és a megvalósításon sokat lehetne javítani, de talán használható minimális SDL alapú működő példának.

* main.cpp (4.93 KB - downloaded 11 times.)
Logged

Enterprise Forever
« Reply #14 on: 2012.January.18. 12:09:43 »

 Logged
Tags: javascript  Spectrum  zx  z80  z81  ispeccy  iOS 
Enterprise Forever  |  :HUN  |  Emulátorok  |  Topic: iEP128emu

Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks

Template made by Mr.Prise
Page created in 0.263 seconds with 25 queries.
Google visited last this page Today at 13:34
Follow ep4ever_news on Twitter