Enterprise Forever

:HUN => Emulátorok => Topic started by: SzörG on 2017.April.02. 13:19:54

Title: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: SzörG on 2017.April.02. 13:19:54
Üdv Mindenkinek!

Azt gondolom a Z80MU - hardveres Z80 alapú gép emulátor megérdemel egy önálló topicot. :-)
Számomra 2016 decemberében mutatkozott be ez a kis hardver, ami Z80MU névre hallgat és hazai fejlesztésű.

Alapvetően az egészen régi "kis telejesítményű" Z80 processzoros gépek hardveres emulációjára készült. Nevesen CP/M, HT1080Z, Primo A64, ZX Spectrum 48K, Videoton TVC 64K, Homelab és Elwro 800 Junior masinák emulációját képes jól megvalósítani.

Ami miatt Enterprise vonalon is érdekes, hogy készül rá az Enterprise 128 core is! Csak egy rövid megjegyzés az EP core-al kapcsolatban. A fejlesztő saját bevallása szerint két évig fésülgette a Zx Spectrum 48K core-t, mire az az elvárható állapotra jutott! Ehhez képest az Enterprise core csak pár hónapja létezik, tehát értelem szerűen van rajta jócskán mit javítani. A poszt célja magának a hardvernek a bemutatása, mivel eddig még említés szinten sem találkoztam vele.

Illetőleg kérném az Enterprise 128 működésében jártas, vagy Enterprise emulátort fejlesztő kollégák segítségét, hogy a hibákat ki tudjuk küszöbölni és az Enterprise core is olyan szintre tudjon jutni a Z80MU-ban, mint a Specrumos megoldás!

A probléma jelenleg az, hogy a digi zene emulációja nem megfelelő, több alkalmazás a digi elindulásakor megáll, zene lejátszásnál lassulás tapasztalható. Ezt mutatja be a videó...   
https://youtu.be/zyL9jldBfnk
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: geco on 2017.April.02. 18:02:22
Nekem egyre gyanúsabb, amit az EP Klubbon is tippeltem, hogy rossz a Dave megszakítás időzítése, és azok a digi lejátszók, amik Dave megszakítást használnak a lejátszáshoz fagyiznak, azok, amik csak a Nick 50Hz-es megszakítását, azok nem.
Lehet kéne írni egy teszt programot.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: geco on 2017.April.02. 20:19:12
Itt van egy gagyi teszt program, az 1KHz-es tesztnél nagyon ritkán előfordul, hogy 14 helyett 13-at ad vissza, csak 4 MHz-en működik, és EP64-en sem.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: geco on 2017.April.02. 21:07:39
Itt van egy gagyi teszt program, az 1KHz-es tesztnél nagyon ritkán előfordul, hogy 14 helyett 13-at ad vissza, csak 4 MHz-en működik, és EP64-en sem.
lehet, ha megszakításban történne a szamolas, pontosabb lenne, holnap megnézem.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: IstvanV on 2017.April.02. 22:17:26
A Z80 nem lehet túl lassú? A SIDBASIC 3 MHz-et ír ki, és a Small Demo 7. része (ahol, ha jól emlékszem, a DTM lejátszóhoz hasonlóan nem megszakítás alapú a hangminta lejátszás) is lassú/mély hangú.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: geco on 2017.April.03. 08:51:11
A Z80 nem lehet túl lassú? A SIDBASIC 3 MHz-et ír ki, és a Small Demo 7. része (ahol, ha jól emlékszem, a DTM lejátszóhoz hasonlóan nem megszakítás alapú a hangminta lejátszás) is lassú/mély hangú.
Mondjuk Speccy 3,5 MHz sebességén fut?
Amúgy ha így van a gagyi tesztemen annak is ki kéne jönnie, még az jutott eszembe, hogy lehet az utasítások időzítése nem az igazi, de akkor azt gondolom egyesével le kéne tesztelni.
Amúgy érdekes, mert volt olyan program, aminek a zenéje meg felgyorsult.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: Zozosoft on 2017.April.03. 09:01:16
Időzítés az biztos nem az igazi. Eredetileg nem volt semmilyen. és úgy persze nagyon sok program rosszul futott. Ha jól tudom most valami közelítő érték lett betéve videó memória várakozásnak.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: Tutus on 2017.April.03. 09:20:05
Nagyon jó kis hardver! Persze érthető, hogy az Enterprise része még nem kiforrott (kb. az utolsó pillanatban lett hozzátéve.)

Szerintem ebben IstvanV tudna igazán segíteni.

Én pedig úgy tudok segíteni, hogy kölcsönadom az én példányomat IstvanV-nek, amíg nem oké az EP rész. :)

Persze, ha ebbe ő is beleegyezik! :D

Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: IstvanV on 2017.April.03. 09:32:03
Időzítés az biztos nem az igazi. Eredetileg nem volt semmilyen. és úgy persze nagyon sok program rosszul futott. Ha jól tudom most valami közelítő érték lett betéve videó memória várakozásnak.

A Small Demo 7. részénél csak a Z80 sebessége a lényeges, a hangminta lejátszás egyszerű ciklusban fut letiltott memória várakozással. A video RAM időzítése itt nem jelent nagy különbséget, az emulációját letiltva csak minimális mértékben lesz magasabb a hang. Tehát probléma lehet a CPU sebességével, vagy az utasítások időzítésével, vagy a DAVE várakozási módjainak az emulációjával. Ha az utasítások időzítése nem jó, azt még viszonylag sok munka javítani a több száz utasításnál, de pontos video RAM emuláció is csak akkor lehetséges, ha a memória hozzáférések időzítése az utasításokon belül is megfelelő.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: IstvanV on 2017.April.03. 11:25:24
A Z80MU-t egyébként lehetséges valahogyan PC-n emulálni?
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: SzörG on 2017.April.03. 13:57:55
A Z80 nem lehet túl lassú? A SIDBASIC 3 MHz-et ír ki, és a Small Demo 7. része (ahol, ha jól emlékszem, a DTM lejátszóhoz hasonlóan nem megszakítás alapú a hangminta lejátszás) is lassú/mély hangú.

amennyire én értek ehhez, vagyis kb sehogy :-) (hívtam a fejlesztőt ide, kértem hogy regisztráljon)
a Z80Mu két STM-et tartalmaz, a a "kisebb" pedig emulálja kizárólag a hangot, "nagyobb" emulálja a gép többi részét.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: geco on 2017.April.03. 20:37:54
Itt az megszakításos verzió, ebben az utolsó teszt produkál néha C8 helyett C7-et, gondolom előfordul néha, hogy eggyel kevesebb 10KHz-es megszakítás esik az 50Hz-es Nick megszakításba.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: ergoGnomik on 2017.April.04. 06:56:52
Láma kérdés: hol lehet erről a kütyüről olvasni a neten? FB nekem nem ér! :mrgreen:
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: IstvanV on 2017.April.04. 13:28:30
Láma kérdés: hol lehet erről a kütyüről olvasni a neten? FB nekem nem ér! :mrgreen:

Én nem találtam szinte semmit a fent linkelt YouTube videón kívül. :oops: Itt (https://logout.hu/tema/arduino/hsz_4713-4713.html) említik egy fórumon, de ez nem sok információ.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: SzörG on 2017.April.05. 13:27:14
Láma kérdés: hol lehet erről a kütyüről olvasni a neten? FB nekem nem ér! :mrgreen:

sehol :-) ezért tettem ide ki :-) tudtommal csak pár darab létezik belőle eddig, ez az oka ...
amúgy igen az FB-n lehetett róla olvasni.
meghívtam ide a fejlesztőjét, jön mihelyt be tud regisztrálni :-)
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: zka67 on 2017.April.10. 21:05:57
Sziasztok, szóval én terveztem és írtam a programját a Z80MU-nak. Ebben egy 168MHz-es Cortex-M4-es proci dolgozik a képmegjelenítésen, a Z80 futtatásán, az IO eszközök kezelésén, kivéve a hangot. A hangot egy másik, 72MH-es Cortex-M3-as proci generálja, ami egy 3Mbit/s-es soros vonalon kapja az adatokat (üzemmód beállíáts, regiszterszám, adat, stb...).

A Z80 utasítások nem órajel alapon vannak végrehajtva, ezt nem bírná a proci, hanem utasításonként, és ha 64us-nyi utasítást végrehajtott, akkor bevárja a sorszinkront. A sorszinkron a videójel DMA megszakításával érkezik, ami alatt feltölti a következő sorhoz szükséges adatokkal a DMA buffert, és az aktuális sor pedig a másik DMA bufferből kerül megjelenítésre. A DMA 16 bites adatokat küld ki a videó buszra, 4R 4G 4B 2- H V. RGB értelemszerűen az RGB értékek, 2 nem használt kimenet is van, és a HSYNC és a VSYNC biteket.

A Z80 utasítások ciklusra pontosak, ezeket már többször is leellenőriztem, azokkal nincs baj.

EP128 emuláció: nekem sosem volt még a kezemben igazi EP128, így csak az ep128emu-val tudom összehasonlítani, de ebben a programban elég korlátozott a debug lehetőség, legalábbis én nem jöttem rá, hogyan lehet pl. bármit módosítani benne. A lényeg az, hogy eddig nem is hallottam se a NICK, se a DAVE chipekről, és ezeknek a leírása sem az emulátor készítők legjobb barátja.

Időzítések: a DAVE timerei mindkét processzorban emulálásra kerülnek, mert mint említettem, a Z80 emulálása gyorsabban végrehajtásra kerül, mint a valóságban, és utána vár a HSYNC-re.

Szóval a lényegre térve: itt többen is említettétek, hogy fontos a memória várakozás időzítése. Ez még biztosan nem jó az emulátorban, csak van benne valami. Egészen pontosan minden memória műveletnél hozzáad egy órajelet a Z80 ciklusokhoz ha be van állítva a "minden flag" a DAVE-ben. A csak az M1-nél történő várakozás még nincs benne.

Ha valaki leírná, hogy pontosan hogyan is kell időzíteni a várakozásokat, azt megköszönném.

Továbbá a DAVE timereit sem tudom a Z80 órajelével etetni, egyszerűen nem bírja a proci. Ezért az 1Hz, 50Hz és az 1kHz-es megszakítások számlálói a HSYNC alatt változnak csak, a CPUCLK/15625 értékkel, és ekkor történik az IRQ generálása is. Nem tudom, hogy ez okozhat-e valamilyen problémát?

Aztán a hanggenerátor megszakítással is kellet egy kicsit trükköznöm, hogy a Z80 emuláció a megfelelő sebességgel fusson: bizonyára észrevettétek, hogy a kazettáról töltés lassabb egy kicsit, mint az eredeti gépen. Itt kénytelen voltam sűrűbben foglalkozni a hg megszakítással, míg normál módban csak minden 16.-ik DAVE órajelre lép a számláló, de ekkor 16-ot. Lehet, hogy nem jó az ötletem, sőt most, hogy közben néztem a kódot, a DAVE frekvencia osztó bitje itt nincs is emulálva, ezt majd pótolom. Ebből az következik, hogy ha a DAVE hg értéke kisebb, mint 16, akkor kimaradhat megszakítás, de én úgy számoltam, hogy ennél sűrűbben értelmetlen megszakítást generálni...

Asszem jobb lesz ezt az egész számlálósdit újraírni...

Szóval minden segítséget, ötletet szívesen veszek, és amint működik rendesen az emuláció, utána majd rátérek a hanggenerátor problémára. Addig is egy kérdés, a bricky nevű program a 11-es és a 15-ös regisztereket használja D/A konverternek, ezek a zajcsatorna amplitudó regiszterei, és természetesen nem is szól megfelelően a hang. Esetleg valaki utána tudna nézni addig is a dolognak?

Üdv.
Zoli



Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: geco on 2017.April.10. 21:53:15
Pálinkás jó reggelt, és üdv a klubban :)

By the way klub, 15-én lesz EP klub, ha érdekel, még igazi EP-t is kezeid közé foghatsz :)

Szerintem az időzítésekben István, vagy Zozó tud majd segíteni, és tuti fog is :)

A Bricky István trückös digi lejátszóját használja, fixen magasra állítja a 0,2,és zajcsatorna kimenetét, és az egyes csatorna lesz az időzítésre használva:

Code: [Select]
        ld      a,0ch
        out     (0b4h),a
        call    waitLoop
        ld      a, 07fh
        out     (0a0h), a
        out     (0a2h), a
        out     (0a4h), a
        call    waitLoop
        ld      a, 007h                   ; reset all oscillators
        out     (0a7h), a                 ; to zero phase and output state
        call    waitLoop
        ld      a, 080h
        out     (0a1h), a                 ; channel 0 output is constant '1'
        ld      a, 00eh
        out     (0a6h), a                 ; 9-bit noise generator, clock is chn 1
        ld      b, 14
lp1:    call    waitLoop
        ld      a, 080h                   ; channel 3 clock is -(chan. 3 output)
        out     (0a3h), a
        call    waitLoop
        ld      a, 000h                   ; set channel 3 clock to '0'
        out     (0a3h), a                 ; channel 3 output should be '1'
        djnz    lp1                       ; after this loop
        call    waitLoop
        ld      a, 00fh
        out     (0a6h), a                 ; channel 3 clock is chan. 2 output (0)
        call    waitLoop
intfreq ld      hl,0014h
        ld      a,l
        out     (0a2h),a
        ld      a,h
        out     (0a3h),a
        call    waitLoop
        ld      a, 065h                   ; set OSC1 as IRQ clock, and start it
        out     (0a7h), a

Gratula a cucchoz :)
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: IstvanV on 2017.April.10. 23:24:15
EP128 emuláció: nekem sosem volt még a kezemben igazi EP128, így csak az ep128emu-val tudom összehasonlítani, de ebben a programban elég korlátozott a debug lehetőség, legalábbis én nem jöttem rá, hogyan lehet pl. bármit módosítani benne.

Módosítani a második lapon lehet, itt található a monitor, és Lua script futtatására is itt van lehetőség.

Quote
A lényeg az, hogy eddig nem is hallottam se a NICK, se a DAVE chipekről, és ezeknek a leírása sem az emulátor készítők legjobb barátja.

A fórumon található részletesebb információ mindkettőről, bár nem könnyű megtalálni a sok régi hozzászólás között.

Quote
Szóval a lényegre térve: itt többen is említettétek, hogy fontos a memória várakozás időzítése. Ez még biztosan nem jó az emulátorban, csak van benne valami. Egészen pontosan minden memória műveletnél hozzáad egy órajelet a Z80 ciklusokhoz ha be van állítva a "minden flag" a DAVE-ben.

Az nem lehet, hogy nem a megfelelő módot emulálja?

0: várakozás minden műveletnél
4: várakozás csak M1-nél
8, 12: nincs várakozás

A 0 és 12 cseréje megmagyarázná a "3 MHz-es" CPU-t, sok program használja az utóbbit a várakozás tiltására.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: MrPrise on 2017.April.11. 06:33:50
A fórumon található részletesebb információ mindkettőről, bár nem könnyű megtalálni a sok régi hozzászólás között.
A wiki-n van leírás a Nick-ről: Tigrian Nick leírása (http://wiki.enterpriseforever.com/index.php/Nick)

Izgalmas ez a HW emulátor projekt!
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: ergoGnomik on 2017.April.11. 09:13:41
@zka67: Mi a vas? Valami COTS devboard? Valamiből kiszerelt cucc? Saját tervezés?

Izgalmas ez a HW emulátor projekt!
Ez egyelőre inkább tűnik szoftvernek, mint hardvernek, de neked legyen igazad!
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: IstvanV on 2017.April.11. 10:17:07
Néhány régebbi leírás és egyéb érdekesség amit találtam:
- DAVE hanggenerátorok (https://enterpriseforever.com/hardver/dave/msg19278/#msg19278)
- NICK órajel és video RAM időzítés tesztek (https://enterpriseforever.com/emulatorok/idozitesi-problemak-az-emulatorokban/msg14863/#msg14863)
- NICK video módok működése (https://enterpriseforever.com/hardver/nick/msg53432/#msg53432)
- további NICK video mód információ (https://enterpriseforever.com/hardver/nick/msg22124/#msg22124)
- a 83h port felső két bitjének a működése (https://enterpriseforever.com/emulatorok/re-spectrum-emulator-1018/msg16611/#msg16611)
- NICK vízszintes szinkron TV kimeneten és 48 karakter szélesre állított kép (https://enterpriseforever.com/hardver/nick/msg24907/#msg24907) (screenshotok)
- NICK VRAM időzítés tesztelése oszcilloszkóppal (https://enterpriseforever.com/hardver/nick/msg32713/#msg32713)

Nem ciklus vagy M-state vagy ezekre bontott utasítás alapú emulációban nehéz lehet a video RAM pontos időzítését megoldani. Ismerni kell az egyes hozzáférések időpontját az utasításon belül, és a várakozás időtartama fél ciklus felbontású. De talán célszerűbb lenne csak valamilyen egyszerű fix időzítést (pl. 2-3 ciklus) beépíteni.

A "várakozás csak M1-nél" mód 2 ciklussal növeli minden prefixes (ED, CB, DD, FD, DD CB, FD CB) utasítás futásidejét, a többinél egy ciklus a várakozás.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: zka67 on 2017.April.13. 01:48:13
Sziasztok, köszönöm mindenkinek a segítséget, és az ünnepek alatt igyekszem javítani az emulátort.

@ergoGnomik: a "vas" teljesen saját tervezés és a szoftver is teljesen saját, nincs semmi OS, az alapoktól írtam a rendszert. Mivel a határon van a "vas" teljesítménye, ezért rengeteget kellett optimalizálnom, és néhol kompromisszumokat is kellett kötnöm.

És egy kép az üres nyákokról :)
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: IstvanV on 2017.April.13. 10:12:01
A Bricky István trückös digi lejátszóját használja, fixen magasra állítja a 0,2,és zajcsatorna kimenetét, és az egyes csatorna lesz az időzítésre használva:

Ennek a működése röviden:
- a 0. és a 2. csatornán beállítja a SYNC bitet, ami fix 0 kimenetet eredményez
- a 0. csatornán engedélyezett a gyűrűmoduláció (XNOR művelet a 2. csatornával), ezért lesz 0 XNOR 0 = 1 a kimenete
- az 1. csatornán átmenetileg engedélyezett a gyűrűmoduláció a 3. csatornával és a SYNC, így a kimenete a zajcsatorna kimenete invertálva
- a 3. csatorna órajele az 1. csatorna, ahol a gyűrűmoduláció felváltva engedélyezett és tiltott, azaz a zajcsatorna órajel bemenetén a saját invertált kimenete visszacsatolva és 0 váltakozik ciklusban. Ez akkor eredményez stabil állapotot, ha a polinom számláló kimenete 1
- N bites polinom számláló kimenetében legfeljebb N-1 0 bit fordulhat elő egymás után, ezért ha elég sokszor fut le a fenti ciklus, akkor garantáltan talál 1 bitet
- a 3. csatorna órajele végül a továbbra is fix 0 kimenetű 2. csatorna lesz
- az 1. csatorna most már használható megszakítás időzítésre

A wiki-n van leírás a Nick-ről: Tigrian Nick leírása (http://wiki.enterpriseforever.com/index.php/Nick)

A wiki-n csak a leírás első része olvasható, a CRT és a kompozit video működéséről. Kifejezetten a NICK-ről a későbbi részekben található információ, például itt (https://enterpriseforever.com/hardver/nick/msg1204/#msg1204). Talán érdemes még említeni az EXOS 2.0 műszaki leírást (http://enterprise.iko.hu/books/EXOS_Version_20_Technical_Information.pdf), az ismertebb 2.1-es könyvben néhány részlet a NICK-ről már nem található meg.
Title: Re: Z80MU - ARM STM32 alapú hardveres emulátor
Post by: Zozosoft on 2017.April.13. 10:57:24
Az igazán ínyencek meg esetleg még további részleteket is találhatnak ezekben:
http://enterprise.iko.hu/technical/NICK-Old-VDC-ELITE-description.pdf (http://enterprise.iko.hu/technical/NICK-Old-VDC-ELITE-description.pdf)
http://enterprise.iko.hu/technical/NICK-Internal-timing-of-VDC-Elite.pdf (http://enterprise.iko.hu/technical/NICK-Internal-timing-of-VDC-Elite.pdf)