Welcome, Guest. Please login or register.


Author Topic: iEP128emu (Read 25026 times)

Offline varrogy

  • User
  • *
  • Posts: 76
  • OS:
  • Mac OS X Mac OS X
  • Browser:
  • Safari Safari
    • View Profile
iEP128emu
« 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?

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

Üdv,
Gyuri

Offline endi

  • EP addict
  • *
  • Posts: 6898
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.80 Opera 9.80
    • View Profile
    • Honlapom
Re: iEP128emu
« 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.
A diplomás magyar programozó megcsinált egy pacmant egy év alatt, majd lefikázta a világ legjobb játékait. :D

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
  • OS:
  • Linux Linux
  • Browser:
  • Safari Safari
    • View Profile
    • http://lgb.hu/
Re: iEP128emu
« 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" :-)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13194
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 9.0.1 Firefox 9.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: iEP128emu
« 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.

Offline varrogy

  • User
  • *
  • Posts: 76
  • OS:
  • Mac OS X Mac OS X
  • Browser:
  • Safari Safari
    • View Profile
Re: iEP128emu
« 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?

Offline szipucsu

  • EP addict
  • *
  • Posts: 7481
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 9.0.1 Firefox 9.0.1
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: iEP128emu
« 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.
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos
OPEL #1:"Audi(o):" ACCESS DENIED

Offline IstvanV

  • EP addict
  • *
  • Posts: 4768
  • OS:
  • Linux 64 bit Linux 64 bit
  • Browser:
  • Firefox 5.0 Firefox 5.0
    • View Profile
Re: iEP128emu
« 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.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4768
  • OS:
  • Linux 64 bit Linux 64 bit
  • Browser:
  • Firefox 5.0 Firefox 5.0
    • View Profile
Re: iEP128emu
« 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.

Offline varrogy

  • User
  • *
  • Posts: 76
  • OS:
  • Mac OS X Mac OS X
  • Browser:
  • Safari Safari
    • View Profile
Re: iEP128emu
« 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.
 

Offline IstvanV

  • EP addict
  • *
  • Posts: 4768
  • OS:
  • Linux 64 bit Linux 64 bit
  • Browser:
  • Firefox 5.0 Firefox 5.0
    • View Profile
Re: iEP128emu
« 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 240 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).

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
  • OS:
  • Linux Linux
  • Browser:
  • Safari Safari
    • View Profile
    • http://lgb.hu/
Re: iEP128emu
« 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 :) 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 :)

Offline varrogy

  • User
  • *
  • Posts: 76
  • OS:
  • Mac OS X Mac OS X
  • Browser:
  • Safari Safari
    • View Profile
Re: iEP128emu
« 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:
  (Attachment Link)
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 »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4768
  • OS:
  • Linux 64 bit Linux 64 bit
  • Browser:
  • Firefox 5.0 Firefox 5.0
    • View Profile
Re: iEP128emu
« 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.

Offline varrogy

  • User
  • *
  • Posts: 76
  • OS:
  • Mac OS X Mac OS X
  • Browser:
  • Safari Safari
    • View Profile
Re: iEP128emu
« 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  :oops:
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.



Offline IstvanV

  • EP addict
  • *
  • Posts: 4768
  • OS:
  • Linux 64 bit Linux 64 bit
  • Browser:
  • Firefox 5.0 Firefox 5.0
    • View Profile
Re: iEP128emu
« 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 288 times.)