Welcome, Guest. Please login or register.


Author Topic: Idõzítési problémák az emulátorokban (Read 17539 times)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.1 Firefox 3.0.1
    • View Profile
    • http://enterprise.iko.hu/
Idõzítési problémák az emulátorokban
« on: 2008.July.26. 23:53:52 »
Elõszedtem a régi órajelmérõ programomat, és egy picit kibõvítettem, hogy részletesebb infót adjon.
A program lényege, hogy egy ciklusban számlál, azon ideig amíg a Nick megjeleníti a képernyõ egy részét. Mivel a Nick órajele fix, így a ciklus lefutásának számából ki lehet számolni a Z80 órajelét.
Ha a különbözõ memóriavárakozásokat engedélyezzük (191-es port), akkor látszik is a lassulás a kiszámított órajelekben.
A jelen verzió a 191-es port mind a hat féle beállítása mellett kijelzi az értékeket: a ciklus lefutásának számát, ill. az ebbõl számolt órajelet.
Itt vannak az eredmények, 4, 6 ill. 7.12 Mhz-es valódi gépen futtattva, ep128emu alatt, és EP32 alatt (itt 7.12 nincs, mert nem beállítható tört érték).
Ami kiderült: a "nincs várakozás" ill. "1 órajel várakozás minden utasításnál" üzemmódban ugyanazt hozza a két emu. A "1 órajel várakozás minden memóriahozzáférésnél" módot az EP32 nem emulálja.
"nincs várakozás" módban minden frekvencián picit lassabbak az emuk mint az igazi gép.
"1 órajel várakozás minden utasításnál" módban 4 Mhz-en picit lassabbak, viszont nagyobb órajelen jelentõsen gyorsabbak az igazinál!
"1 órajel várakozás minden memóriahozzáférésnél" módban az ep128emu 4 Mhz-en jó, nagyobb órajelen gyorsabb.
1279-01281-11283-2
1285-31287-41289-5
1291-61293-7

Offline Ep128

  • EP addict
  • *
  • Posts: 1595
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 2.0.0.15 Firefox 2.0.0.15
    • View Profile
    • Honlapom
Re: Idõzítési problémák az emulátorokban
« Reply #1 on: 2008.July.27. 00:14:09 »
Ez tök izgi! :-) (EDC -t is rá kellene venni, hogy kicsit "hozza fel" az EP32-t... :-) ) Igen tanulságos képek!

Offline IstvanV

  • EP addict
  • *
  • Posts: 4803
  • OS:
  • Linux (Suse) Linux (Suse)
  • Browser:
  • Firefox 2.0.0.6 Firefox 2.0.0.6
    • View Profile
Re: Idõzítési problémák az emulátorokban
« Reply #2 on: 2008.July.27. 12:50:09 »
"1 órajel várakozás minden utasításnál" módban 4 Mhz-en picit lassabbak, viszont nagyobb órajelen jelentõsen gyorsabbak az igazinál!
Feltételezem, hogy azért, mert a nagyobb órajel csak a Z80-ra érvényes, viszont a várakozásokat a DAVE generálja, amely ilyenkor kisebb frekvencián működik a Z80-hoz képest, és így a várakozások átlagosan hosszabbak 1 Z80 ciklusnál (az eredetileg 18 ciklus alatt végrehajtott INC HL/JR NC mindkét nagyobb órajelnél 22 illetve 24 ciklus lesz a várakozásokat engedélyezve, ami arra utalhat, hogy a várakozás egyszerűen felfelé kerekítődik 2 Z80 ciklusra, de ezt érdemes lenne más ciklussal is tesztelni). Ezt az emulátorok nem veszik figyelembe (ill. az ep128emu csak a video memória esetén).
Egyébként még az eredeti 4 MHz-es gép időzítését sem olyan egyszerű emulálni :) Érdemes lenne a tesztet lefuttatni más utasításokkal a ciklusban (pl. CB/DD/ED/FD prefixes utasításokkal is), I/O port művelettel (a NICK portoknál más az időzítés), és a video memóriában is különböző utasításokkal.
A kis eltéréseket (pl. 3.99 MHz 4 MHz helyett) az okozhatja, hogy a NICK frekvenciája nem pontosan annyi a Z80-hoz képest, mint amit az emulátorok feltételeznek; például az én gépemen ha a Z80 pontosan 4 MHz lenne, akkor a sorfrekvencia kb. 890100/57 Hz, és nem 890625/57 Hz, ami az ep128emu alapértelmezett beállítása (de ez megváltoztatható a konfigurációban).

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.1 Firefox 3.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Idõzítési problémák az emulátorokban
« Reply #3 on: 2008.July.28. 12:12:58 »
Elöször is egy kis javítás: végig olvastam mégegyszer Tigrian Nick leírását, amiböl kiderül, hogy amikor a Nick órajelét használjuk rendszerórajelnek, akkor egész pontosan 7.125 Mhz lesz a Z80, csak mi nem mértünk ennyi tizedesre.
Ha ezt az értéket állítjuk be az ep128emu-ban, akkor a várakozás nélküli esetben megegyezik a visszakapott HL értéke a valódi gépen mérttel.
1298-0

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.1 Firefox 3.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Idõzítési problémák az emulátorokban
« Reply #4 on: 2008.July.28. 20:43:20 »
Feltételezem, hogy azért, mert a nagyobb órajel csak a Z80-ra érvényes, viszont a várakozásokat a DAVE generálja, amely ilyenkor kisebb frekvencián mûködik a Z80-hoz képest
Ajaj, itt akkor most találtunk egy nagy emulációs bakit!
A DAVE a rendszerórajellel mûködik (ennek a fele jut a Z80-nak), így amikor turbósítjuk a gépet, gyorsul a DAVE is, ami jól érzékelhetõ abból, hogy a generált hangok magasabbak lesznek! Na ez az amit az emulátorok nem tudnak!
Eleve készülhettek arra, hogy 6 Mhz-es gépet is kiadjanak, mivel beépítettek egy kapcsoló bitet a DAVE-be, amivel megadható, hogy 8 vagy 12 Mhz a rendszerórajel, így biztosítva a helyes hangfrekvenciát. Ez a bit mûködik is az emulátorokban, csak éppen a Dave nem gyorsul hozzá turbós konfigban.
Mint a programból kiderült, ennek a bitnek nincs hatása a Z80 várakozásokra, ezért megegyezik az elsõ három eredménysor a második hárommal.

És azért kell gyorsulnia a DAVE-nek, mert különben az A14-A21 címvezetékek nem mûködnének szinkronban a közvetlenül a Z80-ból jövõ A0-A13-al!

Quote
viszont a várakozásokat a DAVE generálja
Mivel ez még nem volt teljesen egyértelmû, végeztem egy kisérletet, ahol kikötöttem a Z80 összes olyan lábát, ahol le lehet fékezni :-)
1300-0

A Videó RAM várakozások így is mûködnek, a kapcsolási rajzot megnézve egy megoldás maradt: a rendszerórajelet a Nick felezi meg a Z80 számára, és amikor éppen összevesznének a videómemórián, akkor szünetelteti a Z80 órajelét.

Viszont az egyéb beállítható várakozások így nem mûködnek, mint további kisérletezéssel kiderült, azok rendesen a WAIT lábat használva készülnek (Hopp itt akkor felmerül egy újabb turbó gomb lehetõsége :-) ). Ezeket tényleg a Dave készíti...
...de a hogyan az még rejtély. Én azt gondoltam volna, hogy egyszerüen 2 rendszerórajel ciklus és kész...
Quote
mindkét nagyobb órajelnél 22 illetve 24 ciklus lesz a várakozásokat engedélyezve, ami arra utalhat, hogy a várakozás egyszerûen felfelé kerekítõdik 2 Z80 ciklusra
Ami érdekes anomália, hiszen azt már tudjuk, hogy turbóval a Dave is gyorsul.
Lehet, hogy nem a rendszerórajelet használja? De miféle egyéb idõzítõt építettek belé?
Esetleg van a kapcsolási rajzon valami kondenzátoros cucc a Davere kötve, aminek nem tudni a szerepét, mivel nem tudni, hogy azok a lábak mit csinálnak...
Kieg: de nem, annak a kondinak zajszûréshez van köze, ha kiszedem, iszonyatosan zajos lesz a hang, ellenben a várakozások nem változnak :-)
« Last Edit: 2008.July.28. 21:44:13 by Zozosoft »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4803
  • OS:
  • Linux (Suse) Linux (Suse)
  • Browser:
  • Firefox 2.0.0.6 Firefox 2.0.0.6
    • View Profile
Re: Idõzítési problémák az emulátorokban
« Reply #5 on: 2008.July.28. 22:35:02 »
Ajaj, itt akkor most találtunk egy nagy emulációs bakit!
A DAVE a rendszerórajellel mûködik (ennek a fele jut a Z80-nak), így amikor turbósítjuk a gépet, gyorsul a DAVE is, ami jól érzékelhetõ abból, hogy a generált hangok magasabbak lesznek! Na ez az amit az emulátorok nem tudnak!
A magasabb hang és időzítő frekvenciát valójában tudja emulálni az ep128emu, csak nem automatikusan, hanem a "Sound clock frequency"-t külön be kell állítani, 6 MHz-es Z80 esetén 750000-re, 7.125 MHz-nél pedig 890625-re (ami azonos a "Video clock frequency" értékével). Amit nem tud az az, hogy a várakozás ne csak 1 ciklus lehessen, mint a 4 MHz-es eredeti gépen, hanem 2 vagy esetleg több is.
Quote
A Videó RAM várakozások így is mûködnek, a kapcsolási rajzot megnézve egy megoldás maradt: a rendszerórajelet a Nick felezi meg a Z80 számára, és amikor éppen összevesznének a videómemórián, akkor szünetelteti a Z80 órajelét.
Ezt még érdemes lenne tesztelni, hogy a video memória várakozások mennyire pontosak az emulátorban különböző órajeleket használva.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.1 Firefox 3.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Idõzítési problémák az emulátorokban
« Reply #6 on: 2008.July.28. 22:51:37 »
A magasabb hang és idõzítõ frekvenciát valójában tudja emulálni az ep128emu, csak nem automatikusan, hanem a "Sound clock frequency"-t külön be kell állítani, 6 MHz-es Z80 esetén 750000-re, 7.125 MHz-nél pedig 890625-re (ami azonos a "Video clock frequency" értékével).
A következõ verzióban lehetne, hogyha átírjuk a Z80 frekit, akkor automatikusan álljon át a sound freki is? Végülis az igazin nem is lehet külön állítani.
Quote
a video memória várakozások mennyire pontosak az emulátorban különbözõ órajeleket használva.
Változatlan program, 64K módban futattva, azaz videómemóriában.
Van némi eltérés...
1302-01304-1
1306-21308-3
1310-41312-5

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.1 Firefox 3.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Idõzítési problémák az emulátorokban
« Reply #7 on: 2008.July.29. 09:13:38 »
A kis eltéréseket (pl. 3.99 MHz 4 MHz helyett) az okozhatja, hogy a NICK frekvenciája nem pontosan annyi a Z80-hoz képest, mint amit az emulátorok feltételeznek; például az én gépemen ha a Z80 pontosan 4 MHz lenne
Bennem is felmerült, hogy esetleg az alkatrészek szórása miatt van eltérés, de több gépen nézve is azonosak az eredmények.
A 4 Mhz most kb 5 gépen volt nézve, a 6 és a 7.125 pedig 2-2 gépen. És korábban le is volt közölve az órajelmérõ program az Enterpressben, és senki nem panaszkodott, hogy nem kerek 4 Mhz jön ki neki :-)
Szóval lehet, hogy van eltérés ahhoz képest amit feltételezünk, de az minden gépben úgyanúgy ott van.

Quote
akkor a sorfrekvencia kb. 890100/57 Hz, és nem 890625/57 Hz, ami az ep128emu alapértelmezett beállítása (de ez megváltoztatható a konfigurációban)
Ha átírom kb 890450-re, akkor jó lesz a 4 és 6 Mhz-es várakozás nélküli érték, ekkor viszont 7123600 értéket kell használni 7125000 helyett harmadik sebességnek, hogy jó legyen.

Igazából kéne valaki, aki oszcilloszkóppal megmérné, hogy mennyi az annyi? Tigrian, hol vagy? :-)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4803
  • OS:
  • Linux (Suse) Linux (Suse)
  • Browser:
  • Firefox 2.0.0.6 Firefox 2.0.0.6
    • View Profile
Re: Idõzítési problémák az emulátorokban
« Reply #8 on: 2008.July.30. 15:18:16 »
A következõ verzióban lehetne, hogyha átírjuk a Z80 frekit, akkor automatikusan álljon át a sound freki is? Végülis az igazin nem is lehet külön állítani.
Ez megoldható, bár annak is van előnye, ha nem változik automatikusan, például egy 64 MHz-es Z80-at beállítva talán célszerűbb, ha nem lesz 4 oktávval magasabb a hang, még ha ez az eredeti gépen nem is így lenne (eltekintve attól, hogy ilyen nagy órajellel nem is működne a hardver :)).
Quote
Változatlan program, 64K módban futattva, azaz videómemóriában.
Van némi eltérés...
Ami nem túl meglepő, ugyanis a pontos emulációhoz az is fontos lenne, hogy a memória műveletek az utasításon belül melyik ciklusokban történnek, mivel a várakozás mértéke nem fix, hanem attól függ, hogy egy 890 kHz-es cikluson belül mikor próbál a memóriához hozzáférni a Z80. Bár az ep128emu ezt is emulálja valamennyire, de nem igazán pontosan, és rövid ciklusoknál nagy eltérés is lehet; nagyobb programrészeknél (pl. BASIC utasítások végrehajtása közben) az átlagos sebesség már pontosabb.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.1 Firefox 3.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Idõzítési problémák az emulátorokban
« Reply #9 on: 2008.July.31. 00:37:38 »
nagyobb programrészeknél (pl. BASIC utasítások végrehajtása közben) az átlagos sebesség már pontosabb.
Most csináltam egy BASIC tesztet:
10 PRINT TIME$
20 FOR I=1 to 2000
30 A=SQR(I)
40 NEXT
50 PRINT TIME$
60 PING

Az igazi gépen órakártya volt így turbóban is pontos az óra, ROM bõvítõk: ZT 1.8, EXDOS 1.3, BASIC 2.1, epemu alatt ugyanez. Epemunál turbó frekvenciáknál beállítottam a DAVE-t is megfelelõ sebességre.
Az elsõ idõ mindig a valódi gépen mért, a második az emus. Nyilván nem 100%-ig pontos mérés, de az jól látszik, hol vannak nagyobb eltérések.
A normál, minden utasításnál 1 várakozás mód:
4 Mhz: 5:53, 5:58
6 Mhz: 4:06, 3:35
7.125 Mhz: 3:22, 2:56

Nincs várakozás mód:
4 Mhz: 5:02, 5:01
6 Mhz: 3:07, 3:06
7.125 Mhz: 2:35, 2:34

Minden memóriamûveletnél várakozás:
4 Mhz: 6:32, 6:30
6 Mhz: 4:51, 3:57
7.125 Mhz: 3:58, 3:17

Video RAM (64K) mód:
4 Mhz: 7:04, 6:58
6 Mhz: 5:11, 4:40
7.125 Mhz: 4:41, 3:53

Offline IstvanV

  • EP addict
  • *
  • Posts: 4803
  • OS:
  • Linux (Suse) Linux (Suse)
  • Browser:
  • Firefox 2.0.0.6 Firefox 2.0.0.6
    • View Profile
Re: Idõzítési problémák az emulátorokban
« Reply #10 on: 2008.July.31. 14:27:39 »
A normál, minden utasításnál 1 várakozás mód:
4 Mhz: 5:53, 5:58
6 Mhz: 4:06, 3:35
7.125 Mhz: 3:22, 2:56

Nincs várakozás mód:
4 Mhz: 5:02, 5:01
6 Mhz: 3:07, 3:06
7.125 Mhz: 2:35, 2:34
Ezek megfelelnek a korábbi tesztek alapján várható eredménynek, az eltérést az okozza, hogy az emulátor nem 2, hanem csak 1 ciklust vár a nagyobb frekvenciákon, bár a legelső sorban az 5:58/5:53 kevésbé érthető. Egyébként ugyanezt a programot futtatva (emulátoron) nekem lassabb volt, talán mert nem pontosan ugyanaz volt a konfiguráció.
Quote
Video RAM (64K) mód:
4 Mhz: 7:04, 6:58
6 Mhz: 5:11, 4:40
7.125 Mhz: 4:41, 3:53
Itt meglepő, hogy az emulátoron a sebesség gyakorlatilag lineárisan nő az órajellel, pedig nagyobb frekvencián elvileg átlagosan többet kéne várakozni, mert a NICK órajele nem változik. Lehet, hogy ez egy bug az emulátorban ?

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.1 Firefox 3.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Idõzítési problémák az emulátorokban
« Reply #11 on: 2008.July.31. 14:50:22 »
nekem lassabb volt, talán mert nem pontosan ugyanaz volt a konfiguráció.
Igen azt én is tapasztaltam, ha több bõvítõ is van a rendszerben, akkor lassabb pár másodperccel, ezért a Zozotools RL NEW utasítással mindent likvidáltam ami nem feltétlenül szükséges (ZT az órakártya kezelés miatt maradt).

Offline IstvanV

  • EP addict
  • *
  • Posts: 4803
  • OS:
  • Linux (Suse) Linux (Suse)
  • Browser:
  • Konqueror 3.5.9 Konqueror 3.5.9
    • View Profile
Re: Idõzítési problémák az emulátorokban
« Reply #12 on: 2009.June.02. 22:47:50 »
Ha átírom kb 890450-re, akkor jó lesz a 4 és 6 Mhz-es várakozás nélküli érték, ekkor viszont 7123600 értéket kell használni 7125000 helyett harmadik sebességnek, hogy jó legyen.

Igazából kéne valaki, aki oszcilloszkóppal megmérné, hogy mennyi az annyi? Tigrian, hol vagy? :-)
Ezzel kapcsolatban itt egy egyszerű teszt program:
* nickfrq.zip (0.91 kB - downloaded 245 times.)
Ha a villogó csík nem mozdul el hosszabb idő után sem, akkor a feltételezett frekvencia pontos. Ha felfelé mozog, akkor a várakozást növelni kell, ha lefelé, akkor pedig csökkenteni.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13315
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.0.10 Firefox 3.0.10
    • View Profile
    • http://enterprise.iko.hu/
Re: Idõzítési problémák az emulátorokban
« Reply #13 on: 2009.June.03. 20:20:28 »
Ha a villogó csík nem mozdul el hosszabb idõ után sem, akkor a feltételezett frekvencia pontos.
És a feltett program milyen frekvenciát feltételez? Mert nekem mindig fut a csík.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4803
  • OS:
  • Linux (Suse) Linux (Suse)
  • Browser:
  • Konqueror 3.5.9 Konqueror 3.5.9
    • View Profile
Re: Idõzítési problémák az emulátorokban
« Reply #14 on: 2009.June.03. 20:29:49 »
És a feltett program milyen frekvenciát feltételez? Mert nekem mindig fut a csík.
Ha igazi gépen nézted, és gyorsan fut, akkor úgy látszik, nem jó frekvenciát tételezett fel :oops: Mindenesetre az én gépemen a második program kb. pontos. Érdekes lenne megnézni néhány gépen, hogy mennyi üres ciklussal lesz stabil, bár ha nagy eltérések vannak, akkor talán nincs is igazán jelentősége :)

Kisebb fórum probléma: miért az "ep128emu 2.0.6" topicba kerülök vissza innen a hozzászólások elküldése után ? :eek: