Enterprise Forever

:HUN => SOUND: => Topic started by: geco on 2011.November.28. 09:33:47

Title: SID lejátszó
Post by: geco on 2011.November.28. 09:33:47
Meglepi
Istvánnal való beszélgetés, és egy előző kis konverzió fellelkesített, és megpiszkáltam a régen pihenőben lévő programot. Jópár hibát kijavítottam, pl nem tölti be a fájlokat minden egyes váltásnál, de még vannak benne hibák, várom a hibaaddon listát :D
Használatos billentyűk: int joy jobb/bal, Esc.
Title: Re:SID lejátszó
Post by: Lacika on 2011.November.28. 23:47:40
A file-bõvítés használata talán szimpatikusabb lenne. (?)
Most már határozottan értékelhetõ hangok jönnek ki a gépbõl!  :smt038 (Bár a Last Ninjára kicsit nehéz ráismerni...  :oops:)
Title: Re:SID lejátszó
Post by: endi on 2011.November.29. 01:31:37
Hú, ez tök jó. Nekem különösen, aki marha jól ismerem a legtöbb sid zenét.
Szerintem nagyon jól sikerült szimulálni, vagyik átvinni amit lehet paramétert.
Title: Re:SID lejátszó
Post by: geco on 2011.November.29. 08:58:29
A file-bõvítés használata talán szimpatikusabb lenne. (?)
Most már határozottan értékelhetõ hangok jönnek ki a gépbõl!  :smt038 (Bár a Last Ninjára kicsit nehéz ráismerni...  :oops:)
Mire gondoltál a file-bővítésnél?
:) Vannak még gondok, az LN1-ben vannak nehezebben felismerhető számok, de ez sztem a spéci hangoknak köszönhető, ilyen az Exploding fist is, az LN2-ben van pár hely, ahol az envelope túl hamar lecseng, a Dizzy is ezért értékelhetetlen, ezt szeretném javítani, az első hiba nem hiba, az csak az István tervbeli SID lejátszójában lehetne megoldva :)
Title: Re:SID lejátszó
Post by: geco on 2011.November.29. 09:10:31
Hú, ez tök jó. Nekem különösen, aki marha jól ismerem a legtöbb sid zenét.
Szerintem nagyon jól sikerült szimulálni, vagyik átvinni amit lehet paramétert.
Köfi :), az envelope-okat kell még javítani, ott van bibber, csak az envelope (50Hz-es megszakítással, azt megnézem még, hogy mire lehet felmenni megszakításügyileg), zaj (ott is egyszerre csak egy csatorna szólhat), és a generátor hangfrekvenciája van átvíve (István adta az ötletet a 8 kb-os táblához, ez nagyot lendített a hangok pontosságán), és a control bit csekkolása.
Title: Re:SID lejátszó
Post by: geco on 2011.November.29. 09:22:51
Még azt nem tudom, hogy a zajfrekvencia SID-en milyen értékek között mozog, egyelőre 4-gyel osztottam a DAVE-re kapott hangvfrekvenciát, a zajfrekvencia értékhez.
Title: Re:SID lejátszó
Post by: Zozosoft on 2011.November.29. 09:38:50
Mire gondoltál a file-bõvítésnél?
Szerintem erre:
[attachimg=1]
Title: Re:SID lejátszó
Post by: geco on 2011.November.29. 11:19:23
Szerintem erre:

Ezt nem is imerem, de az EP128.hu-n se találom, tuti én vagyok a béna. Ez a megadott helyről csinál egy file-listát, és onnan lehet kiválasztani a megfelelő file-t?
Title: Re:SID lejátszó
Post by: Zozosoft on 2011.November.29. 11:33:52
Ezt nem is imerem, de az EP128.hu-n se találom, tuti én vagyok a béna. Ez a megadott helyrõl csinál egy file-listát, és onnan lehet kiválasztani a megfelelõ file-t?
Itt a legutóbbi verzió. (http://enterpriseforever.com/programozas/epdos_fejlesztese-t50.0.html;msg13094#msg13094)
Ezt használja a HEASS, IVIEW, SNDPLAY, stb
Beolvassa a lemez könyvtárát, ott mászkálhat a felhasználó, majd visszaadja a megadott pufferbe azt a fájlnevet, ami ki lett választva, már mehet is rá a csatorna megnyitás hívás :-)
Title: Re:SID lejátszó
Post by: IstvanV on 2011.November.29. 11:58:07
A letöltéseknél található Boulder Dash átiratom forráskódjában van .com file-ba beépíthető változat is (file.s), így olyan gépen is használható, amelyen nincs FILE bővítés. A bouldash.s-ben a chooseLevelFile rutinban található példa az ilyen beépített FILE használatára.
Title: Re:SID lejátszó
Post by: geco on 2011.November.29. 12:49:58
A letöltéseknél található Boulder Dash átiratom forráskódjában van .com file-ba beépíthető változat is (file.s), így olyan gépen is használható, amelyen nincs FILE bővítés. A bouldash.s-ben a chooseLevelFile rutinban található példa az ilyen beépített FILE használatára.

Köszi szépen, ez így már szimpibb, a másik megoldás nem tetszett, be kellett volna tölteni mindig a bővítést, ha épp nincs betöltve.
Title: Re:SID lejátszó
Post by: geco on 2011.November.29. 13:54:10
A file-bõvítés használata talán szimpatikusabb lenne. (?)
Most már határozottan értékelhetõ hangok jönnek ki a gépbõl!  :smt038 (Bár a Last Ninjára kicsit nehéz ráismerni...  :oops:)
A mostani megoldásban mi nem szimpi?
Title: Re:SID lejátszó
Post by: geco on 2011.November.30. 08:41:14
Köfi a segítséget, a FILE-ra le lett cserélve a régi megoldás. Szemrevételezés után várom a többi dolgot :)
Title: Re:SID lejátszó
Post by: Zozosoft on 2011.November.30. 09:57:40
Egy apróság: a föl/le gombokra lehetne a tune választásnál az eleje/vége ugrás. Ez olyan sok tune-s fájlnál érdekes, mint pl a N&S.
Egy másik, hogy célszerû lenne a 8+3-as fájlnevekkel berakni a zenéket a csomagba, hogy EXOS kompatibilisek legyenek :-)
Title: Re:SID lejátszó
Post by: Povi on 2011.November.30. 10:43:48
Meglepi

Tök jó, köszönjük! Akkor ezek szerint mégis csak sid player letta dologból... :-)

Már csak egy SID-es hangkártyát kéne építeni EP-re (mint anno a C+4-hez és PC-hez is csináltak), és akkor aztán tényleg tökéletesen szólna minden... :-) Gondolom a lejátszó program megírása is sokkal egyszerűbb lenne, és elférne pár száz byte-ban az egész :-)
Title: Re:SID lejátszó
Post by: Zozosoft on 2011.November.30. 11:26:56
A probléma az, hogy nincsenek SID chipek, ha csak nem belezel ki pár C64-et (ezt csinálják a PC-re köthetõ SID-es cucchoz is).
Title: Re:SID lejátszó
Post by: endi on 2011.November.30. 12:56:17
miért kéne sid chip? akkor mitõl lenne EP-s?
pont az a lényeg hogy az EP szimulálja a sidet ahogy tudja, ettõl lesz eredeti

esetleg olyasmi lehetne hogy digi hangban tárolni a legjellemzõbb, legtöbbet használt sid hullámformát és 1-2 szólam ezt használhatná
Title: Re:SID lejátszó
Post by: geco on 2011.November.30. 13:09:35
Egy apróság: a föl/le gombokra lehetne a tune választásnál az eleje/vége ugrás. Ez olyan sok tune-s fájlnál érdekes, mint pl a N&S.
Egy másik, hogy célszerû lenne a 8+3-as fájlnevekkel berakni a zenéket a csomagba, hogy EXOS kompatibilisek legyenek :-)
Jó ötlet, a végleges csomagban így lesz :) Igaz a 64 megás SID gyüjteményem így már keményebb dió ;)
Majd kitalálok valamit.
Jó ötlet, úgyis van benne 3 fölös gombfigyelés ( elméletileg sebességváltó lenne, 50/60/100 Hz, de sztem ez kimarad), annak a helyére beteszem, vagy meg lehet csinálni azt, hogyha az első nótát hallgatjuk, és balrát nyomunk, akkor az utolsóra ugrik.
Melyik legyen?
Title: Re:SID lejátszó
Post by: geco on 2011.November.30. 13:14:24
Tök jó, köszönjük! Akkor ezek szerint mégis csak sid player letta dologból... :-)

Már csak egy SID-es hangkártyát kéne építeni EP-re (mint anno a C+4-hez és PC-hez is csináltak), és akkor aztán tényleg tökéletesen szólna minden... :-) Gondolom a lejátszó program megírása is sokkal egyszerűbb lenne, és elférne pár száz byte-ban az egész :-)
Az igazat megvallva, eredetileg ez a program SAM coupé-ra lett megírva, ahhoz csináltak SID kártyát, benne van a fullos 6510-es emuláció, és a SID header elemzése, a D400-D4FFF-es tartományba írást figyelte eredetileg, ha ez történt, akkor megvizsgálta hová, és ha SID register írás volt, akkor kiírta a megfelelő portra. Ha lenne kártyánk, csak párszáz bájttal lenne rövidebb, meg a 8Kb-tos frekvenciatáblával, viszont sokkal jobban szólna :D
Title: Re:SID lejátszó
Post by: geco on 2011.November.30. 13:16:20
miért kéne sid chip? akkor mitõl lenne EP-s?
pont az a lényeg hogy az EP szimulálja a sidet ahogy tudja, ettõl lesz eredeti

esetleg olyasmi lehetne hogy digi hangban tárolni a legjellemzõbb, legtöbbet használt sid hullámformát és 1-2 szólam ezt használhatná
Ez lenne az István ötlete alapján, legalábbis, ha jól értettem :) (Sőt az összes )
Title: Re:SID lejátszó
Post by: Povi on 2011.November.30. 18:46:27
Az igazat megvallva, eredetileg ez a program SAM coupé-ra lett megírva, ahhoz csináltak SID kártyát, benne van a fullos 6510-es emuláció, és a SID header elemzése, a D400-D4FFF-es tartományba írást figyelte eredetileg, ha ez történt, akkor megvizsgálta hová, és ha SID register írás volt, akkor kiírta a megfelelő portra. Ha lenne kártyánk, csak párszáz bájttal lenne rövidebb, meg a 8Kb-tos frekvenciatáblával, viszont sokkal jobban szólna :D
na, azt azért nem gondoltam volna, hogy 6510 emuláció is kell...
azt hittem, hogy csak a SID portjaira kell adatokat küldözgetni
ezek szerint a .sid fájlban 6510 kód is van? és annak a futását kell emulálni? az emuláció szoftveres (a SAM copué változatban), vagy hardveres? és az EP változatban?
Title: Re:SID lejátszó
Post by: IstvanV on 2011.November.30. 19:58:37
ezek szerint a .sid fájlban 6510 kód is van? és annak a futását kell emulálni?

Igen, a SID file nem csak a zenét tartalmazza, hanem a lejátszásához szükséges 6510 kódot is. A PC-s SID lejátszók gyakorlatilag egy lebutított C64 emulátort használnak.
Title: Re:SID lejátszó
Post by: Povi on 2011.November.30. 21:14:38
Igen, a SID file nem csak a zenét tartalmazza, hanem a lejátszásához szükséges 6510 kódot is. A PC-s SID lejátszók gyakorlatilag egy lebutított C64 emulátort használnak.
Köszi, ezt nem gondoltam volna...
Title: Re:SID lejátszó
Post by: endi on 2011.November.30. 21:35:57
Azért tartalmaznak c64 emulációt, mert sokszor speckó kód van egy-egy zenéhez.
De ugyanez igaz specyre is, csak ott ügye nincs hanglejátszó, ezért csak a z80-at kell szimulálni. 48-as esetén kell is, mivel ügye a hang maga z80 kód.

De c64-re is voltak zenészek, zenelejátszó írók, akik keményebben megkódolták a rutint, ezért kell c64 emuláció is sok c64 zenéhez.

Valójában persze ezeket a kódokat meg lehetne írni az adott procin is amin fut a zenelejátszó, de egyszerûbb emlulálni inkább, hiszen c64 emulációk már adottak régóta.
Title: Re:SID lejátszó
Post by: geco on 2011.December.01. 19:02:51
na, azt azért nem gondoltam volna, hogy 6510 emuláció is kell...
azt hittem, hogy csak a SID portjaira kell adatokat küldözgetni
ezek szerint a .sid fájlban 6510 kód is van? és annak a futását kell emulálni? az emuláció szoftveres (a SAM copué változatban), vagy hardveres? és az EP változatban?
A 6510 emuláció szoftveres, SID hardveres, csináltak SAM Coupéhoz SID kártyát :D EP-n meg szoftveres, de nem is nevezném emulációnak, mert csak pár dolog van "emulálva" de ahhoz képest sok SID file elég jól szól. Az egyszerre 2-3 csatornán szóló zajt szeretném még megoldani, az A1,A3,A5 regiszterekre való 3x írással, nem lesz olyan jó, mint a zajcsatorna, de talán a sima négyszögjelektől jobb, és az envelope-okat szeretném javítni még. Egyelőre nem tudom miért van pár SID, ahol nagyon hamar elhalkul egy-egy hang, ilyen pl a Dizzy, de találkoztam mással is.  :oops:
Ezek a tervek :)
Title: Re:SID lejátszó
Post by: IstvanV on 2011.December.01. 19:14:45
az A1,A3,A5 regiszterekre való 3x írással, nem lesz olyan jó, mint a zajcsatorna

Az A6h port egyik (4.) bitjével felcserélhető a 17 bites és a 7 bites polinom számláló (a hangcsatornák alapértelmezés szerint az utóbbit használják 30h torzításnál). Ezzel jobb minőségű a zaj, én a CPC átiratokban is ezt a módot használtam.
Title: Re:SID lejátszó
Post by: geco on 2011.December.01. 19:19:49
Az A6h port egyik (4.) bitjével felcserélhető a 17 bites és a 7 bites polinom számláló (a hangcsatornák alapértelmezés szerint az utóbbit használják 30h torzításnál). Ezzel jobb minőségű a zaj, én a CPC átiratokban is ezt a módot használtam.

köfi, megjegyzem :)
Title: Re:SID lejátszó
Post by: endi on 2011.December.01. 19:43:23
mondjuk ezt a "minden csatornán tud szóló zajt sose értettem, itt fõleg az AY-ra gondolok
hiszen ugyanaz a zaj 3x lejátszva is ugyanaz lesz, csak hangosabb :)
Title: Re:SID lejátszó
Post by: geco on 2011.December.13. 09:17:17
mondjuk ezt a "minden csatornán tud szóló zajt sose értettem, itt fõleg az AY-ra gondolok
hiszen ugyanaz a zaj 3x lejátszva is ugyanaz lesz, csak hangosabb :)
Na ez igaz AY-n, gyanúsan a hangerővel játszva lehet különböző effekteket kialakítani a csatornákon.
Title: Re:SID lejátszó
Post by: IstvanV on 2011.December.13. 11:35:36
hiszen ugyanaz a zaj 3x lejátszva is ugyanaz lesz, csak hangosabb :)

Nem feltétlenül ugyanaz a zaj van minden csatornán. A SID-en más lehet a frekvencia, AY-n pedig a zaj modulálható (AND művelet) az adott csatorna négyszögjelével.
Title: Re:SID lejátszó
Post by: geco on 2011.December.13. 15:08:46
Nem feltétlenül ugyanaz a zaj van minden csatornán. A SID-en más lehet a frekvencia, AY-n pedig a zaj modulálható (AND művelet) az adott csatorna négyszögjelével.

A SID-en láttam, a frekvenciagenerátor adja meg a zajfrekit is, az AY-s AND-elő megoldást nem is láttam a doksiban :)
Melyik regiszterekkel lehet ezt beállítani?
Title: Re:SID lejátszó
Post by: IstvanV on 2011.December.13. 15:46:59
az AY-s AND-elő megoldást nem is láttam a doksiban :)
Melyik regiszterekkel lehet ezt beállítani?

Egyszerűen engedélyezni kell a zajt és a négyszögjelet is ugyanazon a csatornán. De ezt az effektust korábban már említettem, ezért (is) gyakran nehéz AY-s hangeffektusokat EP-re átírni.
Title: Re:SID lejátszó
Post by: geco on 2011.December.23. 17:40:51
Elkészült a SID player, köszi István a segítséget zajcsatorna ügyben, Zozó, és István köszi a File kiterjesztés használatához való hozzájárulást :)
A program EXOS kompatibilis, max 60 Kb méretű SID lejátszására alkalmas, csak a PSID-eket támogatja. Egyedi sebességgel ellátott SID-eket a következő sebességgel játsza le:
>160Hz sehogy
80Hz és 160Hz között 100Hz-en
55Hz és 80Hz között 60Hz-en
40Hz és 55Hz között 50Hz-en
<40Hz sehogy

Belső joy fel/le a SID utolsó/első zenéjére való ugrás beépítve, mostmár mindhárom csatornán szólhat zaj :) , néhány SID halkan szólt, javítva (ezek a SID-ek egy fázisban kétszer állították a control regisztert, én meg csak megszakításban figyeltem az állapotát), néhány SID megöli a lejátszót, mert nem csak a SID regisztereket írja, hanem a kódot tartalmazó tartományba is ( 0d000h-0dfffh), ilyen pl a MYTH 2. száma (itt már nem is feltűnő az írás, mielőtt a 0d040h-0d05fh-s tartományt kiürítettem volna, fagyott a program, most nem, ha a 2. szám után megyünk a 3-dikra, néma marad, a 0d040h-s rész felszabadításával a Grand Prix Circuit viszont nem fagy :D )

SID Player (http://enterpriseforever.com/dlattach.html;topic=187.0;attach=7021)
Title: Re:SID lejátszó
Post by: Lacika on 2011.December.23. 22:18:53
A MUSICIANS könyvtárban érdemes körülnézni. Nagyon profi zenék vannak itt, és kevesebb a "trükkös", mint a játékzenéknél. Elképesztõ, milyen hangok jönnek ki néha a gépbõl  :ds_icon_cheesygrin:
Title: Re:SID lejátszó
Post by: Zozosoft on 2011.December.23. 22:28:02
A MUSICIANS könyvtárban érdemes körülnézni. Nagyon profi zenék vannak itt, és kevesebb a "trükkös", mint a játékzenéknél. Elképesztõ, milyen hangok jönnek ki néha a gépbõl  :ds_icon_cheesygrin:
Majd lesz az ep128.hu-n válogatott, jól szóló zenékbõl gyûjtemény?  :oops:
Title: Re:SID lejátszó
Post by: Lacika on 2011.December.23. 22:44:03
Majd lesz az ep128.hu-n válogatott, jól szóló zenékbõl gyûjtemény?  :oops:

Majd meglátom. Gyereksikítás mellett kicsit nehéz...  :ds_icon_cheesygrin:
Egyébként már most ki van egészítve a csomag pár klasszikussal.
Title: Re:SID lejátszó
Post by: Lacika on 2011.December.27. 12:15:39
Kerültek új zenék a SID-csomagba, ugyanakkor néhány - eredetileg benne lévõ - zenét kiselejteztem...  :oops:
Title: Re:SID lejátszó
Post by: geco on 2011.December.31. 02:35:34
Kerültek új zenék a SID-csomagba, ugyanakkor néhány - eredetileg benne lévõ - zenét kiselejteztem...  :oops:
No para :) , én meg találtam egy hibát  :oops: , rájöttem, hogy miért nem hallgat el teljesen a zene pl a Last Ninja 2-ben, a sustain levelt nem vizsgáltam, hogy magasabb-e, mint a max hangerő, mostmár javítva, és átalakítva a lejátszó ABC sztereóvá.

Sid Player V1.1 (http://enterpriseforever.com/dlattach.html;topic=187.0;attach=7021)
Letöltéseknél a file lecserélve, és a linkek is.
Title: Re:SID lejátszó
Post by: Lacika on 2011.December.31. 11:18:48
átalakítva a lejátszó ABC sztereóvá.

Ez mit jelent? Mi az?
Title: Re:SID lejátszó
Post by: Zozosoft on 2011.December.31. 11:32:18
Ez mit jelent? Mi az?
Elsõ csatorna bal, második közép, harmadik jobb.
Title: Re:SID lejátszó
Post by: geco on 2012.January.06. 20:33:06
Itt egy újabb változat, ebben a gyűrűmoduláció az új, igaz csak egy csatornára, a 0-ásra, megpróbáltam az 1-esre is a gyűrűmodulációt a zajcsatornán keresztül, de nagyon rossz lett. Megnéztem pár SID-et, ezek közül, ami gyűrűzött, az 1-es csatornát gyűrűzte a 2-essel, mivel EP-n az 1-es csatornát nem használhattam, ezért megkevertem EP-n a hangcsatornákat, a SID 0,1,2 a DAVE 1,2,0 lett. Szerintem ez se lett az igazi, ha van valakinek ötlete miért lehet, szívesen fogadom :) Nem tudom, hogy jobban szólnak-e a ring modulációt használó SID-ek (előfordulnak érdekes hangzások), mint az előző, ring modulációt nélkülöző verzióban, ezért közzéteszem, mindenki eldöntheti :)
Amivel teszteltem:
LN.SID 7. zene, itt már az elejétől van ring moduláció
LN2.SID, itt elég sokban van, a 4-diket hallgattam többször
NAVYSEAL.SID, másodiktól fölfelé
Title: Re:SID lejátszó
Post by: Lacika on 2012.January.06. 22:02:46
Nem tudom, hogy jobban szólnak-e a ring modulációt használó SID-ek

Szerény véleményem szerint nem...  :oops:
A zenéhez nem sokat rak (semmit?) viszont valóban, elõfordulnak érdekes hangzások...
Title: Re:SID lejátszó
Post by: Zozosoft on 2012.January.06. 22:10:41
Esetleg kapcsolhatóra csinálni? És akkor könnyen lehetne próbálgatni, hogyan szól jobban.
Title: Re:SID lejátszó
Post by: Lacika on 2012.January.07. 00:26:50
És akkor könnyen lehetne próbálgatni, hogyan szól jobban.

Egyszerre két emulátort is el lehet indítani. Én úgy próbálgattam.
Title: Re:SID lejátszó
Post by: geco on 2012.January.07. 18:24:26
Egyszerre két emulátort is el lehet indítani. Én úgy próbálgattam.
Én is így próbáltam :) , és sokkal jobb eredményt vártam tőle, az a bajom, hogy mintha kis recsegés szerűséget hallanék belőle, egyébként nem lenne sztem rossz, a Last Ninjákban elég furcsa a sima négyszögjel ringmoduláció nélkül,szerencsére ritkán használja :D
Title: Re:SID lejátszó
Post by: geco on 2012.January.07. 18:30:04
Esetleg kapcsolhatóra csinálni? És akkor könnyen lehetne próbálgatni, hogyan szól jobban.
Megnéztem, megoldható, ha felmerül az igény, hogy a végleges verzióban kapcsolható legyen a ring mod, akkor bebiggyesztem :)
Annyi hiányosságot látok egyelőre, hogy minden új SID betöltése után be kell majd kapcsolni a ring modulációt.
Title: Re:SID lejátszó
Post by: IstvanV on 2012.January.07. 19:25:33
A SID gyűrűmodulációja csak háromszögjelnél működik, azaz ha a modulált csatornán van háromszögjel, a reSID forráskód (http://plus4emu.svn.sourceforge.net/viewvc/plus4emu/plus4emu/resid/wave.hpp?revision=514&view=markup) alapján (lásd az output___T()-nél).
Title: Re:SID lejátszó
Post by: geco on 2012.January.08. 04:45:14
A SID gyűrűmodulációja csak háromszögjelnél működik, azaz ha a modulált csatornán van háromszögjel, a reSID forráskód (http://plus4emu.svn.sourceforge.net/viewvc/plus4emu/plus4emu/resid/wave.hpp?revision=514&view=markup) alapján (lásd az output___T()-nél).

Azt vizsgálom, ha a csatornán 3szög jel van, és a gyűrűmoduláció bit be van állítva, akkor modulál a lejátszó is. (ha a csatorna control regiszterében 14h van)
Title: Re:SID lejátszó
Post by: IstvanV on 2012.January.08. 09:57:39
Nagyobb probléma, hogy a SID háromszögjeles gyűrűmodulációja más effektust eredményez, mint a DAVE egyszerű négyszögjel XOR-olása.
Title: Re:SID lejátszó
Post by: geco on 2012.January.08. 13:36:28
Nagyobb probléma, hogy a SID háromszögjeles gyűrűmodulációja más effektust eredményez, mint a DAVE egyszerű négyszögjel XOR-olása.

Értem, mondjuk ez hallható is ;)
Akkor nem is érdemes vele szórakozni?
Az tetszett, hogy más hangok jönnek ki a gépből, csak az a recsegés szerű addon ne lenn :D
Title: Re:SID lejátszó
Post by: IstvanV on 2012.January.08. 14:10:33
Akkor nem is érdemes vele szórakozni?

A semminél ez is jobb :)
Title: Re:SID lejátszó
Post by: geco on 2012.January.08. 15:01:58
A semminél ez is jobb :)

:) Akkor belefogok a kapcsolós megoldásba, lehet beépítek egy jelzést is, ha lejátszás közben ring moddal találkozik, akkor a keret jelezze.
Title: Re:SID lejátszó
Post by: geco on 2012.January.13. 21:17:14
Kapcsoltam :D

Ring mod kikapcsolt állapotban
Sötétkék keret: ring mod 1. csatornán
Zöld: ring mod 2. csatornán
Közép kék: ring mod 3. csatornán

Ring mod bekapcsolt állapotban a keret mindig barna

Enter: Ring mod ki/be

ha a 2. csatorna modulált, akkor mindez a zajcsatornával történik, aminek a frekvenciáját az 1-es csatorna adja (itt előfordul ronda kombó), ha a 3. csatorna modulált, akkor nem történik semmi.
Title: Re:SID lejátszó
Post by: Lacika on 2012.January.14. 10:41:20
Ring mod kikapcsolt állapotban
Sötétkék keret: ring mod 1. csatornán
Zöld: ring mod 2. csatornán
Közép kék: ring mod 3. csatornán
Ring mod bekapcsolt állapotban a keret mindig barna

Nálam - bekapcsolt ring mod esetén - mindig barna a keret.
Title: Re:SID lejátszó
Post by: szipucsu on 2012.January.14. 11:26:26
Jó lett a lejátszó!
De én a ringmodos és az anélküli lejátszás között nem érzek különbséget.  :oops:
Title: Re:SID lejátszó
Post by: geco on 2012.January.16. 08:59:35
Nálam - bekapcsolt ring mod esetén - mindig barna a keret.
Ez így van beállítva, hogy meg lehessen különböztetni a be, ill kikapcsolt módot, ring modnál nem jelzi, hogy mikor van ring mod valamelyik csatornán, ha jobb lenne jelzéssel, megoldható az is. :) Talán a keret helyett Ring mod: ON/OFF feliratot is be lehet iktatni, csak az hosszabb megoldás.
Title: Re:SID lejátszó
Post by: geco on 2012.January.16. 09:02:47
Jó lett a lejátszó!
De én a ringmodos és az anélküli lejátszás között nem érzek különbséget.  :oops:
A Ring modos lejátszásnál csak akkor lehet különbséget hallani, ha valamelyik csatorna modulált egy másikkal, ezt a ring mod kikapcsolt állapotban jelzi a keret különböző színeivel, ha közép kék a keret, akkor pont a SID egyes csatornáján van ring mod, ami a lejátszóban pont nem emulált, csak a SID 2,3-as csatorna ring modja (sötét kék, zöld keret) okoz hanghatást.
Title: Re:SID lejátszó
Post by: Lacika on 2012.January.16. 11:19:56
Talán a keret helyett Ring mod: ON/OFF feliratot is be lehet iktatni, csak az hosszabb megoldás.

Ez szerény véleményem szerint informatívabb megoldás lenne  :oops:
Title: Re:SID lejátszó
Post by: szipucsu on 2012.January.16. 12:39:40
ha közép kék a keret, akkor pont a SID egyes csatornáján van ring mod, ami a lejátszóban pont nem emulált
Azt hiszem, ez volt a gond... Mondanátok olyan zenéket, amiben nem ilyen ringmod van? Eddig nem találtam, vagy nem vettem észre.  :oops:
Title: Re:SID lejátszó
Post by: geco on 2012.January.16. 13:43:48
Azt hiszem, ez volt a gond... Mondanátok olyan zenéket, amiben nem ilyen ringmod van? Eddig nem találtam, vagy nem vettem észre.  :oops:
Last ninja I 7. song, az LN2-ben is vannak, de általában rövidek, Navy Seals, most ezek jutottak eszembe, de ettől sokkal több SID-ben találkoztam velük.
Title: Re:SID lejátszó
Post by: geco on 2012.January.19. 11:10:58
Jó lesz így, ne módosítsak semmit?
Title: Re:SID lejátszó
Post by: Lacika on 2012.February.19. 20:31:49
A Ring-mod-nak általában nem sok hallható eredménye van, de a Genesis c. darabban egész értékelhetõ hatást eredményez!
Title: Re:SID lejátszó
Post by: endi on 2012.March.25. 14:28:17
Eszembe jutott egy érdekes ötlet. Hasonlóról már volt itt szó: hanghullám elemzése és sok szólamú négyszögjelekké konvertálása. Nos ez egy másféle de hasonló ötlet.

Adott egy hanghullám, mondjuk egy zongora hang. Csak egy billentyû lenyomása. Na most ez a hang tartalmaz olyan infókat, amelyek átvihetõk lennének egy "advanced" EP burkológörbére. Alaphelyzetben egy ilyen görbe csak a hangerõt tartalmazza, azt is egyszerûen (felfutás, kitartás, lecsengés stb). Egy bonyolultabb EP-s zeneszerkesztõben komplexebb görbe rajzolható (pl Musicbox).
De mi lenne, ha ezt a görbét a digi hangból képeznénk le? És nem csak hangerõt, hanem a hangmagasság kis változásait is, meg amit még lehetne (bár más nem igazán jut eszembe hirtelen, esetleg több szólam, torzítások, zajcsatorna használata?).

Lényegében ez olyasmi lenne mint az Epimageconv, csak hanggal. :)

Természetesen az ötlet lényege hogy nem nagy frekvenciával "digitalizálunk" hanem az átlag EP zenékhez hasonlóan 50Hz-s változások lehetnek csak változtatni a paramétereket, azaz az ilyen zene nem vinne sok proci idõt.

De a lényege az ötletek, hogy érdekes ötlet. :)
Title: Re:SID lejátszó
Post by: szipucsu on 2012.March.26. 12:32:08
Eszembe jutott egy érdekes ötlet.
Hát, én ezt nem teljesen értem. Nem írsz egy programot, ami ezt el is végzi? Akkor biztos egybõl érthetõ lenne.
Title: Re:SID lejátszó
Post by: szipucsu on 2012.August.25. 11:14:09
Tényleg nincs itt a Wikin vagy az ep128.hu-n ismertetõ az EPsndconv és az SNDPLAY használatáról, vagy csak én nem találom?
Hangokat, zenéket is konvertáltunk hozzá régebben, azok nincsenek egy helyen valahol?
Title: Re:SID lejátszó
Post by: geco on 2014.November.30. 20:43:07
Elkezdtem a SID-szerű lejátszót, eddig erre jutottam, ez a verzió már egész jó, pedig csak áttértem a négyszögjeleknél az István által ajánlott 20h köépszintre (közép hangerőnél 48 16, valójában nálam 48 15, mert a négyszögjel 20h magas érték, és 1fh alacson értékre van belőve, és XOR-olódik a hangerő), ez nagyon sokat javított a minőségen, nem tudom miket lehetne még javítani, gondolom még a fűrészjeleimen, és a hársomszög jeleimen is lehetne bőven javítani, valaki tudna segíteni javítási ötletekkel? Esetleg István, ha erre jársz :) Ja, és köszönöm a lejátszó rutint, fasza.
Legalább 448Kb-s géppel érdemes kipróbálni, úgy biztos nem fog visszalépni az EP logóhoz, úgy tervezem majd ha kész lesz, hogy minden gépen menjen, amiben legalább 128Kb RAM van, csak a lejátszandó zenék hoszza lesz leszabályozva, 128Kb-s gép esetén kb 1 perc 45 másodperc lesz a lejátszható hossz, ha jól számoltam :D
Title: Re:SID lejátszó
Post by: endi on 2014.November.30. 20:59:32
ezt most nem értem :)
sid emuláció, ami wav-ra konvertál és azt játsza le?
érdekes :)
Title: Re:SID lejátszó
Post by: geco on 2014.November.30. 21:04:20
ezt most nem értem :)
sid emuláció, ami wav-ra konvertál és azt játsza le?
érdekes :)
Nem egészen, az lehet jobb minőségű lenne :D , viszont a világ RAM-ja nem lenne elég, nemhogy 640Kb, ami mindenre az :D
Kinyert SID regiszter értékeket dolgoz fel, annyi különbséggel, hogy a felhasznált hangerő már az envelope-ok által módosított adatok, és a zajgenerátor adatok is már DAVE-re konvertált értékek.
Title: Re:SID lejátszó
Post by: endi on 2014.November.30. 21:11:10
aha
na de akkor hogy lesznek ilyen nem-négyszögjeles hangzások?
elég nagy frekin megy?
azért ez már majdnem digi akkor
vagy nem értem :)
Title: Re:SID lejátszó
Post by: geco on 2014.November.30. 21:18:16
na de akkor hogy lesznek ilyen nem-négyszögjeles hangzások?
elég nagy frekin megy?
azért ez már majdnem digi akkor
Nagyrészt digi, csak a zaj nem az, 15Khz-en megy, amitől én még ettől is jobb hangokat vártam, úgyhogy arra gondoltam, hogy a 3,4szög, és fűrész jeleimmel lehet egy kis gubanc.
Title: Re:SID lejátszó
Post by: endi on 2014.November.30. 22:50:04
na de ha már valami digi benne, akkor miért nem digi minden? hiszen minden sample belemehetne 1 sample-be, nem vinne több memóriát

sőt még valami egyszerű tömörítés is lehetne, van asszem olyan hogy csak a változást tárolják, kevesebb biten
Title: Re:SID lejátszó
Post by: geco on 2014.December.01. 09:55:30
na de ha már valami digi benne, akkor miért nem digi minden? hiszen minden sample belemehetne 1 sample-be, nem vinne több memóriát

sőt még valami egyszerű tömörítés is lehetne, van asszem olyan hogy csak a változást tárolják, kevesebb biten
Ezt az 1 samplés dolgot nem értam, a zaj azért Dave-es, mert az jobb minőséget produkál, mint a zaj sample, egyszerű tömörítés jó ötlet, de sztem ez a megoldás nem spórolna annyit, a frekvenciánál meg lehet nem is lenne elég a kevesebb bites változás, az ismétlődések lerövidítése jelentősebb (x darab y byte) rövidülést okozna, de a legjobb az ismétlődő szekvenciák bevonásával lenne, akkor sztem az összes fájl beleférne max 64 Kb-ba, csak az meg a lejátszástól venne el időt, most a megszakításbeli lejátszó adatellátása kb 5 rasztersort vesz igénybe.
Title: Re:SID lejátszó
Post by: Zozosoft on 2014.December.01. 11:10:37
Én még mindig nem egészen értem mi is ez :oops:
A régi ugye emulálta a C64 procit, és amikor SID írás volt, azt konvertálta DAVE-re.

Ez most kiszedi a SID írásokat, majd valami jobb emulációs algoritmussal "előemésztve" előállítja a DAVE adatokat?
Title: Re:SID lejátszó
Post by: endi on 2014.December.01. 11:37:10
ha 15khz-n tárolsz egy csomó dave értéket, akkor digi hangként 1 byte-ba mixelve mindent (mint digi sample!) sokkal kevesebb lenne, nem?
vagy továbbra se értem :)
Title: Re:SID lejátszó
Post by: geco on 2014.December.01. 11:37:26
Ez most kiszedi a SID írásokat, majd valami jobb emulációs algoritmussal "előemésztve" előállítja a DAVE adatokat?
Az első fele stimmel, SID regiszter értékeket szed ki, és a volume értékeket már az envelope által módosítva, és a zaj frekvenciát már Dave-re konvertálva, és ezeket felhasználva generál hangot a különböző jelek sampléira, négyszögjel esetén van 32 négyszögjel kitöltési tényező is ( SID-en ez 4096), és ring mod.
Egyébként a régit módosítottam úgy, hogy az szolgáltassa nekem az adatokat a féldigi lejátszóhoz, egy kicsikét összerámolva, 4 bájt/csatorna, ahol az első két bájt a frekvencia, a második bájt a ring mod+PWM, a3. bájt bedig a jelformák + a 4 bites hangerő, így 1 másodperc 600 bájt adatba fáj.
Title: Re:SID lejátszó
Post by: geco on 2014.December.01. 11:39:28
ha 15khz-n tárolsz egy csomó dave értéket, akkor digi hangként 1 byte-ba mixelve mindent (mint digi sample!) sokkal kevesebb lenne, nem?
vagy továbbra se értem :)
Szerintem nem, mert a feldolgozásra került adatok 50Hz-enként lettek kigyűjtve, és ilyen sűrűséggel kerülnek feldolgozásra is, két 50 Hz-es megszakítás közben pedig szól a sample a beállított értéken, ez inkább a DTM playerre hasonlít fix samplékkal, amiken szerintem van még módosítanivaló.
Title: Re:SID lejátszó
Post by: endi on 2014.December.01. 12:09:15
aha értem már
Title: Re:SID lejátszó
Post by: szipucsu on 2014.December.01. 12:28:33
Sid.zip (5.75 kB - letöltve 7956 alkalommal.)

Ennek egészen Commodore szerű hangzása van!
Zeneszerkesztőt kéne írni, amivel lehet ilyen hangzásokkal zenét szerkeszteni EP-re.
Title: Re:SID lejátszó
Post by: endi on 2014.December.01. 12:54:50
Ennek egészen Commodore szerű hangzása van!
Zeneszerkesztőt kéne írni, amivel lehet ilyen hangzásokkal zenét szerkeszteni EP-re.

fogj egy c64 emut, töltsd be a zeneszerkesztőt és kész :)
Title: Re:SID lejátszó
Post by: geco on 2014.December.01. 13:19:02
fogj egy c64 emut, töltsd be a zeneszerkesztőt és kész :)
:D , ennyi, aztán már csak ki kell menteni az adatokat, és le is játszható :D
Title: Re:SID lejátszó
Post by: Zozosoft on 2014.December.01. 13:24:12
:D , ennyi, aztán már csak ki kell menteni az adatokat, és le is játszható :D
Mondjuk az igazi az lenne, ha a "kottát" lehetne használni, nem pedig ilyen 65xx gépikódú borzalomból kéne visszanyerni az adatokat.
"Kotta" esetén a különböző ismétlődő motívumok nem fogyasztanának rengeteg plusz helyet.
Title: Re:SID lejátszó
Post by: geco on 2014.December.01. 13:53:30
Mondjuk az igazi az lenne, ha a "kottát" lehetne használni, nem pedig ilyen 65xx gépikódú borzalomból kéne visszanyerni az adatokat.
"Kotta" esetén a különböző ismétlődő motívumok nem fogyasztanának rengeteg plusz helyet.
Az lehet egy következő project, abba már az envelope generálást is be kéne tenni, és egy zajfrekvencia konverziós táblát. Ha ez elkészül, és igény is van egy ilyen zeneszerkesztő/lejátszóra, akkor megpróbálhatom megcsinálni.
Ja, meg a kotta feldolgozása is növelné a megszakítás hosszát. ezért is jobb lenne egy külön dolog rá.
Title: Re:SID lejátszó
Post by: lgb on 2014.December.01. 15:08:51
Mondjuk az igazi az lenne, ha a "kottát" lehetne használni, nem pedig ilyen 65xx gépikódú borzalomból kéne visszanyerni az adatokat.
"Kotta" esetén a különböző ismétlődő motívumok nem fogyasztanának rengeteg plusz helyet.

Ok, de a sid fileformatum lenyege, hogy _barmit_ le tud tarolni pont azert, mert nincs kottahoz kotve, igy ami C64-en pl megszolaltathato barhogy, az abban is benne lesz, mivel maga a 65xx kod is benne van, ami csinalja :) Pl sid-ben akar digi dolgokat is lehet tarolni pont ezert. A "kotta" alkalmazasa ugye beszukiti a lehetosegeket. Igaz, az teny, hogy neha az is eleg lenne :) Amde eleve, ha megnezel mod/s3m/xm barmi hasonlo ilyen formatumot (ok, tudom, ott sample van ... vagy lehet, mert pl s3m-nel adlib "hangszer" is lehet), akkor pl limitalt, hogy milyen hangok lehetnek (nem lehet akarmilyen frekvencia) es pl az effektek is fixek, hogy mik vannak. Amugy persze vannak SID trackerek is, lehet annak formatumot kene hasznalni (bar arra nyilvan nincs olyen sok zene ...), mivel az ongolom jobban kotta alapu :)

Pl: http://sourceforge.net/projects/goattracker2/ (http://sourceforge.net/projects/goattracker2/)

Ebben vannak is ilyesmi "sng" file-ok, ami gondolom mar "kotta" alapuak ... Amugy a fenti cucc raadasul - elvileg - fut Linuxon es Windows-on is.
Title: Re: SID lejátszó
Post by: geco on 2014.December.01. 15:42:16
Itt is van limit, mert pl digis SID adatokat nem tudok kinyerni, csak azokat, amiket másik player lejátszik.
Title: Re: SID lejátszó
Post by: lgb on 2014.December.01. 15:55:57
Itt is van limit, mert pl digis SID adatokat nem tudok kinyerni, csak azokat, amiket másik player lejátszik.

Mar miert ne tudnad? Elvileg irhatsz assembly-ben is egy 65xx lejatszot es belerakod egy sid file-ba es lesz benne digi is ...
Title: Re: SID lejátszó
Post by: geco on 2014.December.01. 16:22:40
Mar miert ne tudnad? Elvileg irhatsz assembly-ben is egy 65xx lejatszot es belerakod egy sid file-ba es lesz benne digi is ...
Hm, ez egy újabb lejátszót igényelne, tényleg megvalósítható, csak még azt nem tudom, hogy mi alapján lehetne megállítani a felvételt, újrakezdős SID-eknél, mert ugye ennél nem lenne hang.
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.01. 18:14:33
Ha be akarom tölteni, nekem simán visszalép EP logo-hoz.
Title: Re: SID lejátszó
Post by: Zozosoft on 2014.December.01. 18:28:33
Ha be akarom tölteni, nekem simán visszalép EP logo-hoz.
Elég RAM-mal próbálod?
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.01. 18:49:17
Elég RAM-mal próbálod?

320K nem elég neki?
Title: Re: SID lejátszó
Post by: Zozosoft on 2014.December.01. 18:52:18
320K nem elég neki?
Nem:

Legalább 448Kb-s géppel érdemes kipróbálni, úgy biztos nem fog visszalépni az EP logóhoz, úgy tervezem majd ha kész lesz, hogy minden gépen menjen, amiben legalább 128Kb RAM van, csak a lejátszandó zenék hoszza lesz leszabályozva, 128Kb-s gép esetén kb 1 perc 45 másodperc lesz a lejátszható hossz, ha jól számoltam :D
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.01. 19:39:01
Egészen újszerű hangzás!
Title: Re: SID lejátszó
Post by: geco on 2014.December.03. 22:56:25
Segítséget szeretnék kérni, SID2 és SID3 közül melyik hangzik jobban, nem tudok különbséget tenni.
SID2 a már feltöltött verzió, fix 32 PWM(kitöltési tényező négyszögjelnél)-mel, 3-4 raszter sor alatt fut le a megszakítás , ami táplálja a lejátszót
SID3 128 PWM-et kezel, és mindig a megszakításban hozza létre az aktuálisan használandót, ha az új PWM érték eltér a régitől, a háromszög/fűrészjel is új lett, ennél 5-10 rasztersor alatt fut le a megszakítás, attól függően, hogy hány PWM-et kell legenerálnia.

Azt láttam, hogy ebben a zenében a 128 PWM pont kell is, mert megszakításonként növeli/csökkenti eggyel az értékét az egyik csatornán, de én nem hallom ezt a különbséget :D
Title: Re: SID lejátszó
Post by: szipucsu on 2014.December.04. 12:45:12
SID2 és SID3 közül melyik hangzik jobban, nem tudok különbséget tenni.
Nekem is egyformának tűnik.
Title: Re: SID lejátszó
Post by: geco on 2014.December.04. 13:18:45
Nekem is egyformának tűnik.
Oké, köszi, akkor a SID3 vonalán megyek tovább, hátha lesz olyan zene, aminél fülbetűnő a különbség :D
Title: Re: SID lejátszó
Post by: geco on 2014.December.14. 15:40:54
Elkészült a SIDBasic (http://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=11324) , ami egy alap SID emuláció (4 jel, envelope 50Hz-es léptetéssel, ring mod), a program EXOS kompatibilis, és felismeri a turbós gépet is, ennek alapján állítja be a lejátszási sebességet is, kivétel a zajt, ami a DAVE zajgenerátorát használja. Legalább 128Kb RAM szükséges, de ebben az esetben a lejátszás limitált, csak 1perc 49mp-ig játsza le a zenéket, a teljes, közel 11 perc lejátszási limithez 460Kb RAM szükséges.
A ZIP file tartalmazza az S64 előállításának lépéseit is a \CRES64\CRES64.TXT fájlban.
Köszi István a segítséget, és a 258 ciklusos alap SID-et :)
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.14. 16:48:31
Egy CLEAR FONT esetleg kellene, hogy HFONT-os konfiigban is jó legyen a három csík lejátszás közben.
Title: Re: SID lejátszó
Post by: geco on 2014.December.14. 17:12:46
Clear font beillesztve, a link már a javított csomagra mutat :)
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.14. 18:19:28
Miért hamis ez nekem? Eredetileg is ilyen volt?
A konvertálással sem jutottam még zöldágra... :oops:
Title: Re: SID lejátszó
Post by: lgb on 2014.December.14. 18:31:23
Forgo C= logo? :-P
Title: Re: SID lejátszó
Post by: geco on 2014.December.14. 18:33:53
Miért hamis ez nekem? Eredetileg is ilyen volt?
A konvertálással sem jutottam még zöldágra... :oops:
Némelyik hangnál én is felfedeztem hamisakat, nem tudom én, hogy miért van, hacsak nem amiatt, hogy a samplén nem teljesen egyenletesen halad előre a lejátszás a frekvenciának megfelelően, mert a frekvencia 2 bájtos, a samplén meg a frekvencia számláló felső bájtjával halad előre.
Hol akadtál el a konvertálásnál?
elméletileg 2 lépés:
1. el kell indítani a START-ot, kiválasztani a lejátszandó SID-et, ha ez megvan, akkor a SID valamelyik songját, majd amikor véget szeretnél vetni a rögzítésnek, meg kell nyomni az ESC-et, 12 fájl generálódik
2. majd a 12 fájl be kell csomni a következő paranccsal
dtf -cr -lz sng.S64 a b g j c d h k e f i l
Title: Re: SID lejátszó
Post by: geco on 2014.December.14. 18:34:23
Forgo C= logo? :-P
Hát az kimarad :D
Title: Re: SID lejátszó
Post by: geco on 2014.December.14. 22:04:04
Megcsináltam a 8KHz-es megszakításból futó lejátszást is, abban is pont ugyanúgy előfordulnak helyenként hamis hangok, úgyhogy csak az előbb említett okra tudok gondolni.
Title: Re: SID lejátszó
Post by: Povi on 2014.December.15. 09:26:59
csak az előbb említett okra tudok gondolni.

Mármint hogy nincs forgó C64 logó? Ez lehet az oka... :mrgreen:
Title: Re: SID lejátszó
Post by: Zozosoft on 2014.December.15. 09:37:50
Mármint hogy nincs forgó C64 logó? Ez lehet az oka... :mrgreen:
Egyértelmű! :ds_icon_cheesygrin:
Title: Re: SID lejátszó
Post by: geco on 2014.December.15. 17:50:23
Na, majd kipróbálom, hátha a forgó logó megoldja :D
Title: Re: SID lejátszó
Post by: geco on 2014.December.15. 21:52:29
Megtaláltam mi a hiba, megcsináltam az újabb verziót, ahol a samplék 256 bájt helyett 512 hosszúak, ennek pontosabbnak kellett volna lennie, de ehelyett még hamisabban játszotta le pl a Ghouls'n'Ghostot, belenéztem a felvevőbe, és kiderült, hogy elkövettem egy hibát, a frekvenciaérték felső bájtját írom ki csak, az alsó bájt fixen 04h, mert HL regiszterben tárolom el a frekvenciát, de a frekvencia alsó értéke az A-ban van. :oops:
Code: [Select]
 
    ld    a,(hl)        ;frekvencia alsó érték
    inc   hl
    ld    h,(hl)        ;frekvencia felső érték
    push  hl            ;és itt tárolom el a frekvenciát, és itt követtem el a hibát is

A forrást javítottam, már csak be kell fordítani, és újragenerálni az S64-eket ,a héten ápdételem a csomagot
Title: Re: SID lejátszó
Post by: lgb on 2014.December.15. 23:41:00
Nesze neked forgo C= logo, nem ott van a bug :)
Title: Re: SID lejátszó
Post by: geco on 2014.December.16. 22:47:33
A hiba javítva, az összes S64 újragyártva, mostmár hamis hangok nélkül, pár hozzászólással lejjebbi link a frissített verzióra mutat.
15KHz-es verzió turbós gépen az igazi, nálam most 16MHz-n megy, de a 8-nak is majdnem olyan jónak kéne lennie :D
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.16. 23:33:43
Sokkal jobb lett!
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.16. 23:43:48
Hol akadtál el a konvertálásnál?
elméletileg 2 lépés:
1. el kell indítani a START-ot, kiválasztani a lejátszandó SID-et, ha ez megvan, akkor a SID valamelyik songját, majd amikor véget szeretnél vetni a rögzítésnek, meg kell nyomni az ESC-et, 12 fájl generálódik

Az első pontnál. A START nekem nem indul el, visszalép az EP logo-hoz.
Title: Re: SID lejátszó
Post by: Zozosoft on 2014.December.17. 00:11:39
Az első pontnál. A START nekem nem indul el, visszalép az EP logo-hoz.
Tipp: FILE bővítés van a rendszerben?
Title: Re: SID lejátszó
Post by: geco on 2014.December.17. 08:56:58
Na a felvevőhöz is sok-sok memória kell, mivel ott tárolja el az értékeket, és csak ESC után menti el, 24x16Kb+96Kb legalább.
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.17. 10:08:12
Na a felvevőhöz is sok-sok memória kell, mivel ott tárolja el az értékeket, és csak ESC után menti el, 24x16Kb+96Kb legalább.

Ez lehet a baj, 320K akkor nem elég neki.
Most már elindul, de miután kiírja a SID adatait, látszólag nem csinál semmit. 2 mega RAM-mal sem. Még a ZozoTools órája is megáll.
Title: Re: SID lejátszó
Post by: geco on 2014.December.17. 10:29:37
Ez lehet a baj, 320K akkor nem elég neki.
Most már elindul, de miután kiírja a SID adatait, látszólag nem csinál semmit. 2 mega RAM-mal sem. Még a ZozoTools órája is megáll.
Milyen konfiggal próbálod?
Az nem lehet, hogy sokáig ír?
Én magnós konfiggal szoktam, 1Mb-vel, azzal nincs gond, és ha virtuális Win7 alól írom Linuxos fájl rendszerre, akkor percekig csak ír :D
Írás után elméletileg a fájlválasztó menünek kell visszajönnie minden esetben.
Title: Re: SID lejátszó
Post by: Zozosoft on 2014.December.17. 10:34:03
Én magnós konfiggal szoktam
Mármint FileIO-s, nem?

Quote
, 1Mb-vel, azzal nincs gond, és ha virtuális Win7 alól írom Linuxos fájl rendszerre, akkor percekig csak ír :D
ALT+W-vel is?
Title: Re: SID lejátszó
Post by: geco on 2014.December.17. 10:46:07
Mármint FileIO-s, nem?
ALT+W-vel is?
Igen :)
ALT+W-vel is, nem az emu lassul be, hanem az írás, ez sztem a virtuális Windózból való Linux fájl rendszerre kiírás okozza, úgyhogy az S64-es fájlok generálásánál át is álltam a Win7 HD image-ébe írásra :D
Title: Re: SID lejátszó
Post by: Lacika on 2014.December.17. 12:32:53
Alt+W-vel hagytam egy percig, de nem is végtett file-műveletet.
A konfig nem magnós, lemezes. FileIO nincs.
Title: Re: SID lejátszó
Post by: geco on 2014.December.17. 14:11:46
Alt+W-vel hagytam egy percig, de nem is végtett file-műveletet.
A konfig nem magnós, lemezes. FileIO nincs.
oké, megnézem.
Title: Re: SID lejátszó
Post by: szipucsu on 2014.December.17. 14:51:07
A hiba javítva, az összes S64 újragyártva, mostmár hamis hangok nélkül, pár hozzászólással lejjebbi link a frissített verzióra mutat.
Mármint az a pár hozzászólással lejjebbi link a letöltések közötti fájlra vonatkozik?
Itt pár hozzászólással lejjebb nem találtam linket. Pedig nem is voltam olyan link.
Title: Re: SID lejátszó
Post by: geco on 2014.December.17. 15:01:36
Mármint az a pár hozzászólással lejjebbi link a letöltések közötti fájlra vonatkozik?
Itt pár hozzászólással lejjebb nem találtam linket. Pedig nem is voltam olyan link.
igen, a letöltések közötti fájlra mutat, sztem már átlapozódott a 2. oldalra :D
Title: Re: SID lejátszó
Post by: geco on 2014.December.17. 19:05:55
Kipróbáltam EP_640k_EXOS23_EXDOS_utils konfiggal, nálam megy.
Title: Re: SID lejátszó
Post by: geco on 2014.December.21. 19:51:41
SIDBasic Int (http://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=11336) újabb verziója a SIDBasic-nek, annyiban más, hogy 8/15KHz-es megszakításból játsza le hangot, a samplék 256 bájt helyett 512 bájtosak, a megszakításból lejátszás miatt sajnos be kellett áldozni a Dave zajgenerálását, így azok is sample-ból mennek. A program elméletileg jól fut emulált turbós gépen is (Dave frekvenciája nem változik a turbósítással), és vas turbós EP-n is, előbbit teszteltem. 4-8Mhz-es CPU sebességig a lejátszás 8KHz-es, 8MHz felett 15KHz-es
Title: Re: SID lejátszó
Post by: Zozosoft on 2014.December.21. 19:54:50
Akkor elvileg 10Mhz-es gépen érezhetően jobban kell majd szólnia?
Title: Re: SID lejátszó
Post by: geco on 2014.December.21. 20:06:55
Akkor elvileg 10Mhz-es gépen érezhetően jobban kell majd szólnia?
Elméletileg ugyanúgy kéne, mint 8MHz-en :), de sokkal jobban kéne , mint 8MHz alatt, és jobban kell szólnia, mint az előző verziónak (kivéve a zaj), mert ott bekavar a lejátszás pár fázisába az adatfeldolgozás, viszont ott meg igazi EP-n ahogy gyorsul a Dave is, úgy lesznek magasabbak a zaj hangok is. Viszont lekaptam a letöltések közül, floppys konfiggal kiakad.
Title: Re: SID lejátszó
Post by: geco on 2014.December.21. 20:20:11
Javítottam, a FILE kilapozta a 2. lapot, én meg vissza nem :D
Title: Re: SID lejátszó
Post by: geco on 2014.December.22. 17:10:34
Újabb kisebb javítás történt, a clear font eddig kimaradt :)
Title: Re: SID lejátszó
Post by: endi on 2016.August.29. 11:03:49
http://www.hvsc.de/download/C64Music/DOCUMENTS/STIL.txt

itt van egy nyan zene sid formátumban :)
Title: Re: SID lejátszó
Post by: Tutus on 2016.August.29. 11:18:42
http://www.hvsc.de/download/C64Music/DOCUMENTS/STIL.txt

itt van egy nyan zene sid formátumban :)

Húúú, jó sok SID :)
Köszönjük! :)
Title: Re: SID lejátszó
Post by: endi on 2016.August.29. 12:41:44
hát sid az marha sok van. szépen össze is vannak gyűjtve.
de itt most a lényeg hogy van nyan sid, tehát most már semmi akadálya hogy ep-n is legyen nyan-os demó, zenével :)
Title: Re: SID lejátszó
Post by: geco on 2017.January.13. 17:34:48
SID Player v1.2 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17075)
Módosított változat, SID lejátszása történhet Dave-vel, ring moddal, vagy nélküle, és SID kártyás konfigon SID-del is. (alap Dave)

új vezérlőbillentyűk:
F1: Dave ring mod nélkül
F2: Dave with ring moddal
F3: SID card
F7: teljesítmény kereten jelzésének kikapcsolása
F8: teljesítmény kereten jelzésének bekapcsolása
Title: Re: SID lejátszó
Post by: ssr86 on 2017.January.13. 19:40:48
I was so excited by this update to sid player however I don't hear any difference after pressing f2... Could someone point to a good example song where the added sound is prominent? Also f4 seems to hang the program... and what is a SID card?
Title: Re: SID lejátszó
Post by: geco on 2017.January.13. 20:25:22
I was so excited by this update to sid player however I don't hear any difference after pressing f2... Could someone point to a good example song where the added sound is prominent? Also f4 seems to hang the program... and what is a SID card?
Shit, I forgot to enabled interrupt, if f4-f6 is pressed.
You can hear the difference in those SID's where ring mod is used, I do not remember exactly, but some of Last Ninja 2 songs contains.
SID card was made by Balagesz, only this card exists, but exists :D and István implemented it in EP128emu.
Title: Re: SID lejátszó
Post by: geco on 2017.January.13. 20:45:33
Hiba javítva, link frissítve.
Error corrected, link updated.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.January.17. 11:27:31
SID Player v1.2 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17075)
Módosított változat, SID lejátszása történhet Dave-vel, ring moddal, vagy nélküle, és SID kártyás konfigon SID-del is. (alap Dave)
Ez akkor ugye a SIDPLAY és  SIDRPLAY programokat váltja ki, igaz?

És van még valami SIDBasic, meg SIDBasic Int, azokkal mi a helyzet?
Title: Re: SID lejátszó
Post by: geco on 2017.January.17. 11:37:46
Ez akkor ugye a SIDPLAY és  SIDRPLAY programokat váltja ki, igaz?
Igen :), és a SID playert, ami a SID kártyára küldi az adatot.
És van még valami SIDBasic, meg SIDBasic Int, azokkal mi a helyzet?
Ez a kettő más, egy 4. SIDPLAYER kinyeri SID port adatokat és kiírja file-ba, ezt játsza le (háromszög, fűrész, és négyszögjellel), pár dolog még meg van valósítva a SID-ből.
A SIDbasic és a SIDBasic int között csak annyi a különbség, hogy a lejátszás a másodiknál megszakításban történik, elméletileg emiatt jobb a minősége.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.January.17. 11:47:35
egy 4. SIDPLAYER kinyeri SID port adatokat és kiírja file-ba
És ez melyik?
Title: Re: SID lejátszó
Post by: geco on 2017.January.17. 12:24:25
És ez melyik?
Szerintem az csak nálam van meg, ugyanúgy, mint az 5. verzió, ami a Dave regiszterek tartalmát menti :)
Title: Re: SID lejátszó
Post by: endi on 2017.January.17. 16:53:37
midi lejátszó nem lesz? :)
netről lehetne forrást találni valamilyen nyelven
egyszerűbb midik lejátszhatók lennének szerintem, csatorna többszörözéssel főleg (amit a hangos topikban beszéltünk)

edit:
https://www.youtube.com/watch?v=y8cbs-FPKR8
Title: Re: SID lejátszó
Post by: szipucsu on 2017.January.20. 22:55:48
midi lejátszó nem lesz? :)
Szerintem nehezítené a dolgot, hogy nem csak 3 csatorna lehet, és még egy csatornán belül is megszólalhat egyszerre lényegében akármennyi hang, akár 10-20 is.
Egyszerűbb midik viszont tényleg érdekesek lennének! Rengeteg 2-3 szólamú zene van midiben, gondolom.

Az ECD-Windows-ban van mod-Rockdigi (vagy valami hasonló) konverter. Ha olyan van, a midi konvertert megcsinálni sem lehet annyira vészes.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.21. 10:45:51
Az ECD-Windows-ban van mod-Rockdigi (vagy valami hasonló) konverter. Ha olyan van, a midi konvertert megcsinálni sem lehet annyira vészes.

A MOD formátumot valószínűleg egyszerűbb konvertálni, mivel a DTM/Rockdigi hasonlóbb ahhoz mint a MIDI-hez.

egy 4. SIDPLAYER kinyeri SID port adatokat és kiírja file-ba

Ez hasznos lehetne, bár így nagyobb lenne a file mérete, nem kellene a lejátszásához szoftveres 6502 emuláció. Esetleg a SID port mentést Lua script is megoldhatná (hasonlóan az Enterball zenéjének Spectrumra konvertálásánál használt megoldáshoz), ami akár Plus/4-en is futhatna.

A lejátszó egyébként még nincs az ep128.hu-n, de a wiki-n is említeni lehetne. :oops:
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.January.21. 11:23:08
A MOD formátumot valószínűleg egyszerűbb konvertálni, mivel a DTM/Rockdigi hasonlóbb ahhoz mint a MIDI-hez.
Mivel MOD-ból lettek konvertálva, ez nem csoda :-) (Ill. a Rockdigiben eredeti EP zenék is készültek)


Quote
A lejátszó egyébként még nincs az ep128.hu-n
Itt van a zene alatt. (http://ep128.hu/Ep_Music.htm)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.21. 11:28:18
Itt van a zene alatt. (http://ep128.hu/Ep_Music.htm)

Valóban, csak itt (http://www.ep128.hu/Ep_Util/Ep_Util.htm) néztem. :oops: Most már a wikin is megtalálható az Enterprise történelemnél.
Title: Re: SID lejátszó
Post by: geco on 2017.January.21. 21:09:04
Ez hasznos lehetne, bár így nagyobb lenne a file mérete, nem kellene a lejátszásához szoftveres 6502 emuláció. Esetleg a SID port mentést Lua script is megoldhatná (hasonlóan az Enterball zenéjének Spectrumra konvertálásánál használt megoldáshoz), ami akár Plus/4-en is futhatna.
Használtam is, a SIDplayer Basichez így generáltam adatot :) Nincs kedved egy egyszerű tömörítőt írni, ami hatékonyan tömöríti az így kinyert port adatot, és csak az aktuális bájtot szolgáltatja? Minden port értékét külön fájlba gyűjtöm.
A másik is hasznos, a DAVE regiszterek kiírása, ezt használtam a Crazy Cars Reloadhoz, az Exploding Fisthez, és a Panic Manhez, itt manuálisan csomagoltam az adatokat :oops:
Ha igény van rá, felteszem.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.21. 21:51:47
Nincs kedved egy egyszerű tömörítőt írni, ami hatékonyan tömöríti az így kinyert port adatot, és csak az aktuális bájtot szolgáltatja?

A Spectrumos Enterball konverzióban már van ilyen, bár a hatékonysága lehetne jobb is.
Title: Re: SID lejátszó
Post by: geco on 2017.January.21. 22:53:44
A Spectrumos Enterball konverzióban már van ilyen, bár a hatékonysága lehetne jobb is.
Béna vagyok, nem találom, pedig átlapoztam a topicot :oops:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.21. 23:06:35
Az Enterball zene konverziója itt (https://enterpriseforever.com/jatekok/enterball/msg21194/#msg21194) található, de a "tömörítés" ebben meglehetősen korlátozott: azzal takarít meg helyet, hogy csak azokat a regisztereket menti amelyek változnak, és a gyakran használt értékeket kevesebb biten tárolja (pl. a 32 leggyakoribb frekvenciát 6 biten, a hangerő eggyel növelését vagy csökkentését pedig 2 biten).
Title: Re: SID lejátszó
Post by: geco on 2017.January.22. 01:46:33
Köszi, mégis láttam, nem gondoltam volna, hogy a LUA végzi a tömörítést is :oops:
Ez hasznos lehet, és szerintem elég gyors a SID regiszterek mentéséhez, majd a SIDBasic-ben való lejátszáshoz (legalábbis most azt gondolom :) )
Amire gondoltam, és amit manuálisan csináltam a mentett Dave regiszterekből, egy táblázatban eltároltam a többször előforduló szekvenciákat, és azoknak az értékeit hívogattam meg, és úgy emlékszem ,hogy volt egy olyan azonosító is, amikor több szekvenicaérték volt egymás mögé téve, és az azonosító utolsó hat bitje pedig hogy hányszor kell lejátszani a szekvenciasort, úgy emlékszem, hogy bit7 volt simán ismétlődő bájtok azonosítója, és bit6 az ismétlődő szekvenciáké, és talán 00xxxxxx a nem "tömörített" bájtkupac, így átlagban 2x-es méretet kaptam az eredeti SID-hez képest.
Title: Re: SID lejátszó
Post by: geco on 2017.January.22. 11:20:29
SIDPlayer v1.2  (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17154)
Kijelzi a SID verziót, amire a SID készült.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.22. 15:07:10
SID felvétel és lejátszás kártyával:

[attachurl=1]
[attachurl=2]
[attachurl=3]

Ez csak egyszerűen a port írásokat menti és epcompress formátumban tömöríti, de a kimeneti file így is meglehetősen nagy méretű, különösen ha a zene folyamatosan állítja a frekvenciát/kitöltési tényezőt/szűrőt. A lejátszó (az IPLAY-hez hasonlóan) 16K-s blokkokban csomagolja ki a bemeneti adatot, de nem biztos hogy mindig jól működik. Felvételnél célszerű lehet 4 MHz-nél nagyobb Z80 órajelet beállítani. A tömörítésnél a blokk és szótár méret 16K-ra korlátozott:

epcompress -raw -m2 -9 -blocksize 16384 -maxoffs 16384 sid_data.bin sid_data.bin

A program könnyen átalakítható lehetne DAVE felvételre és lejátszásra is.
Title: Re: SID lejátszó
Post by: geco on 2017.January.22. 15:20:35
Köszi, ha jól látom itt egymás után menti a kiírt regisztert, és annak a tartalmát, én mind a két verziónál külön fájlba teszem minden regiszter tartalmát , és minden megszakításban eltárolom az értékeket, így marha sok adat kerül ki, de jobban tömöríthető, vagy csak én gondolom így ? :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.22. 15:29:54
én mind a két verziónál külön fájlba teszem minden regiszter tartalmát , és minden megszakításban eltárolom az értékeket, így marha sok adat kerül ki, de jobban tömöríthető

Erra a megoldásra már gondoltam én is, hamarosan készítek ilyen változatot is. Talán lehetne egy 16K-s blokkban 655 minta a 25 SID regiszterből (az első 655 byte a 0. regiszter, utána az 1. regiszter, stb.), ami 13.1 másodperc 50 Hz-es megszakításnál. Tömörítetlenül sem feltétlenül lenne sokkal nagyobb, mivel egy megszakítás gyakran 8 regisztert is módosít.
Title: Re: SID lejátszó
Post by: geco on 2017.January.22. 18:02:59
Erra a megoldásra már gondoltam én is, hamarosan készítek ilyen változatot is. Talán lehetne egy 16K-s blokkban 655 minta a 25 SID regiszterből (az első 655 byte a 0. regiszter, utána az 1. regiszter, stb.), ami 13.1 másodperc 50 Hz-es megszakításnál. Tömörítetlenül sem feltétlenül lenne sokkal nagyobb, mivel egy megszakítás gyakran 8 regisztert is módosít.
Bocs, most megnéztem a SIDBasic-nél hogyan csináltam, csak 12 regisztert mentettem, mivel a többi nincs használatban, minden regiszter egy file:
Rambo song1 esetén lett 12*10669 byte a regiszter mentés, és ezt LZ-vel tömörítettem, így Rambo1.s64 5477 byte lett.
Ez a megoldás tök jó, csak helypazarló, mert ki kell csomagolni mindent előre, és így pl 128K-s gépen csak a zene felét játsza le a lejátszó.
Bár lehet, hogy itt már bármilyen tömörítés, lassítana annyit, hogy a sima SIDBasic-nél minőségromlást okozna, a SIDBasic Int-nél meg a megszakítás sebességét kéne csökkenteni.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.22. 20:11:31
Valóban sokat javít a tömörítésen az adatblokkok fent leírt módon való rendezése, az alábbi file kicsomagolva 344064 byte (kb. 4 és fél perc): :)

[attachurl=1]

Forráskód:

[attachurl=2]
[attachurl=3]
[attachurl=4]

Szerk.: kisebb javítás:
[attachurl=5]

A tömörítés itt is a már leírt módon (16K-s blokkok és szótár méret) történik.

Bár lehet, hogy itt már bármilyen tömörítés, lassítana annyit, hogy a sima SIDBasic-nél minőségromlást okozna, a SIDBasic Int-nél meg a megszakítás sebességét kéne csökkenteni.

Átlagosan nem lassít sokat, egy blokk kicsomagolása jellemzően 0.12-0.14 másodperc, bár ez függ az adattól is, ha ilyen nagy mértékben (30x) tömöríthető, akkor az idő nagy részében csak LDIR utasítást kell futtatni. :) És a blokkok lejátszásának az időtartama 13.1 másodperc. Talán pazarlás is a gyorsabb de nagy méretű rutin használata (illetve itt biztosan, de ez csak egy példa). Azonban a lejátszásnak teljesen megszakításból kell futnia, mert a főprogramban túl hosszú ideig tart a nagy blokkok feldolgozása.
Title: Re: SID lejátszó
Post by: geco on 2017.January.23. 08:37:25
A tömörítés itt is a már leírt módon (16K-s blokkok és szótár méret) történik.

Átlagosan nem lassít sokat, egy blokk kicsomagolása jellemzően 0.12-0.14 másodperc, bár ez függ az adattól is, ha ilyen nagy mértékben (30x) tömöríthető, akkor az idő nagy részében csak LDIR utasítást kell futtatni. :) És a blokkok lejátszásának az időtartama 13.1 másodperc. Talán pazarlás is a gyorsabb de nagy méretű rutin használata (illetve itt biztosan, de ez csak egy példa). Azonban a lejátszásnak teljesen megszakításból kell futnia, mert a főprogramban túl hosszú ideig tart a nagy blokkok feldolgozása.
Úgy fest, akkor át kell dolgoznom a SIDBasic Int-et, bár ha a vezérlést is be kéne tenni 50Hz-es megszakításba, lehet még csökkenteni kéne a lejátszási frekvenciát. Viszont arra gondoltam, ha betenném a vezérlő rutin meghívását a kicsomagoló rutin sűrűbben futó részébe, és csak akkor meghívni, ha lenne videó interrupt, ezzel nem kéne megpiszkálni a digi lejátszást, és maradhatna a sebesség.
Amúgy eddig max 32K-s fájlok lehettek, és 2000h byte-onként szórtam szét utána az adatatot, így lehet lejátszani pl a Rambonak a felét 128K-s gépen.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.23. 11:24:28
Problémát okozhat még a lapozás és a kicsomagoló rutin regiszter használata (bár az utóbbi javítható némi lassulás árán). Ha jól látom, egy keveset talán lehetne gyorsítani a megszakításkezelő rutinon, például át lehetne másolni 0038h kezdőcímre (így megtakarítható egy JP), és az egyik index regiszter helyett a DE'-t is lehetne használni: a hangminta cím a BC'-be kerülne, és 8 ciklussal gyorsabb lenne a kód (4 DD/FD prefix helyett 2 EX DE, HL). De ez nem sok javulás, a lapozás mentése és visszaállítása többet lassítana (minimum 36 ciklust, és 25 lenne a video megszakítás).
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.23. 12:25:26
Az sokat rontana a minőségen ha 512 helyett 256 lenne egy hangminta mérete? Így egyszerűsíteni lehetne a kódon és a memóriaigény is a felére csökkenne. Az első csatorna például 28 ciklust gyorsulna:

Code: ZiLOG Z80 Assembler
  1.         LD    BC, 068E
  2.         ADD   IX, BC
  3.         LD    A, H
  4.         AND   00
  5.         XOR   IXH
  6.         LD    E, A
  7.         LD    A, IXL
  8.         RLA
  9.         RL    E
  10.         LD    A, 4D
  11.         ADC   A, A
  12.         LD    D, A
  13.         LD    A, (DE)
  14.         XOR   18
  15.         OUT   (A9), A

Helyette:

Code: ZiLOG Z80 Assembler
  1.         LD    BC, 068E
  2.         ADD   IX, BC
  3.         LD    A, H
  4.         AND   00
  5.         XOR   IXH
  6.         LD    C, A
  7.         LD    B, 9A
  8.         LD    A, (BC)
  9.         XOR   18
  10.         OUT   (A9), A
Title: Re: SID lejátszó
Post by: geco on 2017.January.23. 13:19:25
Az sokat rontana a minőségen ha 512 helyett 256 lenne egy hangminta mérete?  Így egyszerűsíteni lehetne a kódon és a memóriaigény is a felére csökkenne. Az első csatorna például 28 ciklust gyorsulna:
512 byte a hangminta mérete? :)
Úgy emlékeztem, hogy 256, amúgy tuti nem rontana sokat, sőt le is kéne cserélni, mert a hangmintákat is én dobtam össze, és nem eredeti SID digizett minták.
28 ciklus már egész jó, abba pl majdnem belefér a megszakítás típusának ellenőrzése.
Ha lesz időm, ránézek majd, tudsz generálni optimalizált 256 byte-os hangmintát?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.23. 13:41:13
512 byte a hangminta mérete? :)

A fenti kódrészlet a felső 9 bitet használja a hangminta címzésére, és úgy látom, valóban 512 byte a méret, ez például két négyszögjel 8800h és 8A00h kezdőcímeken:
>8800  20 20 20 20 20 20 20 20
>8808  20 20 20 20 20 20 20 20
...
>8858  20 20 20 20 20 20 20 20
>8860  1F 1F 1F 1F 1F 1F 1F 1F
...
>88F8  1F 1F 1F 1F 1F 1F 1F 1F
>8900  1F 1F 1F 1F 1F 1F 1F 1F
...
>89F8  1F 1F 1F 1F 1F 1F 1F 1F
>8A00  20 20 20 20 20 20 20 20


Quote
28 ciklus már egész jó, abba pl majdnem belefér a megszakítás típusának ellenőrzése.

Egy csatornán 28 ciklus, összesen ennél többet lehet megtakarítani. :)

Quote
Ha lesz időm, ránézek majd, tudsz generálni optimalizált 256 byte-os hangmintát?

Igen, ha ismertek a táblázatok paraméterei, bár az eredeti SID hangminták pontos emulációja nem tudom mennyire fontos a DAVE kimenetének a minőségét figyelembe véve.

Szerk.: a módosított megszakításkezelő rutin ilyen lehetne, ez még gyorsabb az eredetinél és megtakarítja az IX regisztert, de nem használhatja a 2. és 3. lapot hangminták céljára (tehát még egy laphoz még azt is állítani kellene, azonban a blokk méret csökkentésével is meg lehetne oldani ezt a problémát). A "videoIRQHandler" közben engedélyezett a DAVE időzítő megszakítás, és ez egyszerű PUSH utasításokkal mentené a regisztereket és a lapozást.

Code: ZiLOG Z80 Assembler
  1.         org   002fh
  2.  
  3. videoIRQ_:
  4.         ld    a, 31h
  5.         out   (0b4h), a
  6.         ei
  7.         ex    af, af'
  8.         jp    videoIRQHandler
  9.  
  10. ; 0038h
  11.  
  12. irqRoutine:
  13.         ex    af, af'
  14.         in    a, (0b4h)
  15.         and   02h
  16.         jr    z, videoIRQ_
  17.         ld    a, 13h
  18.         out   (0b4h), a
  19. .l1:    ld    a, 00h                    ; *
  20.         out   (0b1h), a
  21.         exx
  22. .l2:    ld    bc, 0000h                 ; *
  23.         ex    de, hl
  24.         add   hl, bc
  25.         ex    de, hl
  26.         ld    a, h
  27. .l3:    and   00h                       ; *
  28.         xor   d
  29.         ld    c, a
  30. .l4:    ld    b, 40h                    ; *
  31.         ld    a, (bc)
  32. .l5:    xor   00h                       ; *
  33.         out   (0a9h), a
  34. .l6:    ld    bc, 0000h                 ; *
  35.         add   iy, bc
  36.         ld    a, d
  37. .l7:    and   00h                       ; *
  38.         xor   iyh
  39.         ld    c, a
  40. .l8:    ld    b, 40h                    ; *
  41.         ld    a, (bc)
  42. .l9:    xor   00h                       ; *
  43.         out   (0adh), a
  44. .l10:   ld    bc, 0000h                 ; *
  45.         add   hl, bc
  46.         ld    a, iyh
  47. .l11:   and   00h                       ; *
  48.         xor   h
  49.         ld    c, a
  50. .l12:   ld    b, 40h                    ; *
  51.         ld    a, (bc)
  52. .l13:   xor   00h                       ; *
  53.         out   (0aah), a
  54.         exx
  55. .l14:   ld    a, 00h                    ; *
  56.         out   (0b1h), a
  57.         ex    af, af'
  58.         ei
  59.         ret
Title: Re: SID lejátszó
Post by: geco on 2017.January.23. 14:48:57
És valóban 512-nek tűnik, emlékeimben a 256 élt :lol:
Megnézem a táblázatokat majd, miket alkottam :) Úgy emlékszem, vagy 1 fűrész jel, egy háromszög, és több négyszögjel , ha jól emlékszem 32 a külön PWM-eknek, de megnézem az elosztást is majd.
Ha csökken az adat mérete 256-ra, akkor több PWM-et is használhatunk :)
Köszi szépen.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.23. 15:00:45
A módosított IRQ rutin egyébként (a timer.lua szerint) 0.085408 ms alatt fut le ha nem hibás, az eredeti a lejátszóban pedig 0.094398 ms. Még egy szegmens lapozásával (+ 36 ciklus) kb. azonos lenne a sebesség. Mivel az IM 1 megszakítás még hozzáad az időhöz 13 ciklust (0.00325 ms) és a frekvencia 7812.5 Hz, a hangminta lejátszás CPU fogyasztása eredetileg 76.3% volt, az átalakítás után pedig 69.3%.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.23. 15:15:04
Jobban meggondolva a rövidebb hangminták használatának mégis lehet hátránya: a zaj minőségét rontaná.
Title: Re: SID lejátszó
Post by: geco on 2017.January.23. 16:07:22
Jobban meggondolva a rövidebb hangminták használatának mégis lehet hátránya: a zaj minőségét rontaná.
Erre nem gondoltam, lehet ezért lett 512.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.23. 18:05:45
Erre nem gondoltam, lehet ezért lett 512.

Bár ha jól látom, az eredeti zaj táblázatok minden hangmintát nyolcszor ismételnek, tehát valójában csak 64 minta egy teljes ciklus. Lehetne kevésbé ismétlődő adat is, de akkor a zaj frekvencia konverzióján kell módosítani, és kevésbé is lenne pontos (nem tudom, zajnál ez mennyire probléma).
Title: Re: SID lejátszó
Post by: geco on 2017.January.23. 19:55:57
Bár ha jól látom, az eredeti zaj táblázatok minden hangmintát nyolcszor ismételnek, tehát valójában csak 64 minta egy teljes ciklus. Lehetne kevésbé ismétlődő adat is, de akkor a zaj frekvencia konverzióján kell módosítani, és kevésbé is lenne pontos (nem tudom, zajnál ez mennyire probléma).
Most jutottam elodáig, hogy fejtegessem én is mit csináltam :D
Először a zajtáblámban nem volt ismétlődés, nagyon rosszul szólt, elkezdtem növelni az ismétlődéseket, és ez lett belőle, viszont, ha lassítanám az olvasást, akkor tuti le lehetne felezni a tábla méretét, és negyedelni az ismétlődést, de lehet rossz a gondolatmenetem.
Így néznek ki a táblák:
noisetable               16 tábla a 16 hangerore
triangletable   equ     noisetable+2000h 16 tábla a 16 hangerore
sawtoothtable   equ     noisetable+4000h 16 tábla a 16hangerore triangletable-bol generálva, egy elem másol, egy elem kihagy, felétol visszafelé ugyanez
pulsetable1     equ     noisetable+6000h alap pulse táblák különbözo PWM-ekre
pulsetable2     equ     noisetable+8000h
pulsetable3     equ     noisetable+0a000h
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.23. 21:13:55
noisetable               8 tábla a 8 hangerore
triangletable   equ     noisetable+2000h 8 tábla a 8 hangerore

Szerintem 16 tábla van mindenből, de azt nem egészen értem, miért ismétlődik a pulsetable háromszor. :oops: A zajgenerátornak elvileg 16 mintát kellene előállítania a "normál" hullámformák egy periódusának az ideje alatt, ami 256 méretű ismétlődés nélküli táblánál a frekvenciát még 16-al osztva érhető el. Így azonban 8 MHz-es gépen 15625 Hz-es megszakítással gyakorlatilag csak 10 bites lenne a zaj frekvenciájának a felbontása, de kevésbé ismétlődne. 7812.5 Hz-nél így számíthatók a frekvenciák:
- négyszög/háromszög/fűrész: SID frekvencia / 2
- zaj: SID frekvencia / 2 / (minták száma a táblázatban / 16)

A kisebb táblázatokkal lehetne minden hullámformából 32 (összesen 32K, azaz 2 szegmens), vagy továbbra is 16, de az egy lapon is elfér.
Title: Re: SID lejátszó
Post by: geco on 2017.January.23. 21:26:43
Szerintem 16 tábla van mindenből, de azt nem egészen értem, miért ismétlődik a pulsetable háromszor. :oops: A zajgenerátornak elvileg 16 mintát kellene előállítania a "normál" hullámformák egy periódusának az ideje alatt, ami 256 méretű ismétlődés nélküli táblánál a frekvenciát még 16-al osztva érhető el. Így azonban 8 MHz-es gépen 15625 Hz-es megszakítással gyakorlatilag csak 10 bites lenne a zaj frekvenciájának a felbontása, de kevésbé ismétlődne. 7812.5 Hz-nél így számíthatók a frekvenciák:
- négyszög/háromszög/fűrész: SID frekvencia / 2
- zaj: SID frekvencia / 2 / (minták száma a táblázatban / 16)

A kisebb táblázatokkal lehetne minden hullámformából 32 (összesen 32K, azaz 2 szegmens), vagy továbbra is 16, de az egy lapon is elfér.
Igen, most módosítás közben vettem észre, épp a minták méretét felezem, egyelőre manuálisan, de meguntam :lol:
A frekvenciaszámítást már feleztem :), de lehet még ez is a kétszerese annak, amit számítottál, ha eljutok odáig, tesztelem.
Valami beugrott a pulse tábla 2 ismétlésével kapcsolatban, mintha csináltam volna dinamikus pulse tábla változtatást futás közben, de szerencsére mindent tele szoktam vágni kommentekkel, így konnyebben megfejtem :ds_icon_cheesygrin:
Title: Re: SID lejátszó
Post by: geco on 2017.January.23. 22:26:00
Generáltam új 3szög táblát, zajt feleztem, a kódban a többit is, majd holnap folytatom.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.24. 09:17:59
A hullámformák torzításának van jelentősége? Nem tudom, hogy ez bug vagy valójában jobb minőségű emuláció. :oops:
[attachthumb=1]

Összehasonlításképpen az emulált (reSID 1.0) 6581 kimenete ilyen, de a torzítás több tényezőtől is függ. A 0 szint közelében a "töréseket" a D/A konverzió rossz minősége eredményezi, a 8580 javítja ezt a hibát.
[attachthumb=2]

Szerk.: a file formátum már tartalmazza a burkológörbéket is, tehát azokat nem a lejátszó emulálja? Ha igen, akkor egy csatorna állapotának a leírásához 4 byte is elég:
- frekvencia (2 byte), zaj esetén talán már a file adatban megfelelően osztva
- PWM felső bitek (5 bit / 1 byte)
- aktuális hangerő (5 bit / 1 byte)
- hullámforma (2 bit), gyűrűmoduláció (1 bit), ezeket tartalmazhatja az előző két byte közül az egyik (talán a PWM lenne célszerűbb)

Így egy 8K-s blokk 682 50 Hz-es megszakításra elég, ami kb. 13.6 másodperc.
Title: Re: SID lejátszó
Post by: geco on 2017.January.24. 13:23:11
A hullámformák torzításának van jelentősége? Nem tudom, hogy ez bug vagy valójában jobb minőségű emuláció. :oops:
Nem akarom rádkenni, de úgy emlékszem te ajánlottad, hogy ne legyen lineáris, mert úgy jobb lesz a kimenet :)

Szerk.: a file formátum már tartalmazza a burkológörbéket is, tehát azokat nem a lejátszó emulálja? Ha igen, akkor egy csatorna állapotának a leírásához 4 byte is elég:
- frekvencia (2 byte), zaj esetén talán már a file adatban megfelelően osztva
- PWM felső bitek (5 bit / 1 byte)
- aktuális hangerő (5 bit / 1 byte)
- hullámforma (2 bit), gyűrűmoduláció (1 bit), ezeket tartalmazhatja az előző két byte közül az egyik

Így egy 8K-s blokk 682 50 Hz-es megszakításra elég, ami kb. 13.6 másodperc.
Igazad van, vegyesen mentek, és így is van, 12 fájlt ment az 5-ös verzióju SIDPlayer, az biztos, hogy a fent felsoroltakat mentem, azt nem tudom még milyen elrendezésben. Az biztos, hogy az 1-2 file a frekvencia, az is lehet, hogy már 16-tal osztott változatban.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.24. 21:07:48
Nem akarom rádkenni, de úgy emlékszem te ajánlottad, hogy ne legyen lineáris, mert úgy jobb lesz a kimenet :)

Nem emlékszem erre, vagy hogy miért pont ilyen legyen (azaz a háromszög például szinusz abszolút értékéhez hasonló), de nem lehetetlen. :oops: Talán a legjobb lenne megnézni a régebbi hozzászólásokat.

Quote
Igazad van, vegyesen mentek, és így is van, 12 fájlt ment az 5-ös verzióju SIDPlayer, az biztos, hogy a fent felsoroltakat mentem, azt nem tudom még milyen elrendezésben. Az biztos, hogy az 1-2 file a frekvencia, az is lehet, hogy már 16-tal osztott változatban.

A konvertáló táblázat alapján DAVE frekvenciának tűnik, de lehet, hogy célszerűbb lenne az eredeti SID frekvenciát tárolni, és esetleg csak a zajnál osztani. Ha a lejátszás frekvenciája 7812.5 vagy 15625 Hz, akkor a SID frekvencia egyszerűen konvertálható (kettővel vagy néggyel osztás).

Tömörített formátum lejátszásához talán hasznos lehet ez az átalakított rutin, bár jobban is meg lehetett volna írni. Nem használja az AF', BC', DE', HL' és IY regisztereket, és csak a 3. lapra ír fix blokk mérettel.

[attachurl=1]

Példa:

Code: ZiLOG Z80 Assembler
  1.         ld    de, 0c000h
  2. l1:     ld    ix, input_buf + 1
  3.         ld    a, 80h
  4. l2:     call  decompressDataBlock
  5.         jr    z, l2
  6.         jr    l1

A DE a kimeneti puffer aktuális pozíciója (8K blokk méretnél C000h, E000h, C000h, E000h, ...), az IX és A regiszterek pedig a bemenetre mutatnak. Visszatéréskor a Z bit 0 az utolsó blokk után, a példa ebben az esetben visszaugrik az adat elejére. Az egyes blokkok hivatkozhatnak az előző tartalmára, és elvileg kezeli a laphatár átlépését is (azaz ha olyan sorozatot kell ismételni ami FFFFh után C000h címen folytatódik).
Title: Re: SID lejátszó
Post by: geco on 2017.January.24. 21:44:39
Köszi szépen, egyelőre azon küzdök ,hogy sikerüljön átalakítani az 50Hz-es adatszolgáltatást megszakításban, egyelőre sokat fagyizok. :D
Tömörített lejátszáshoz tuti hasznos lesz az átalakított rutin, köszönöm szépen, még nem tudom, hogy mi lesz a megvalósítás, egyelőre az alap ötlet, hogy 500h egybefüggő "regiszter" adat, így 12*500h adat lesz csomagolva egy blokkba, vagy ezek többszöröse, attól függ, hogy mennyi szabad szegmens marad 128K-s gép esetén, vagy még az is lehet, hogy megpróbálom átalakítani kisebb blokkra.
Most úgy működik, hogy kicsomagolom az első LZ-s blokkot, és C004-re elkezdem másolni 12-esével ugorva, utána a 2. LZ blokk C005-re 12-esével, és így tovább, így lehet szépen sorban olvasni, és a szabad memória korlátozza be, hogy milyen hosszan játsza le. Maximum kitömörített adatblokk 32k lehet, ami majd 11 perces SID hosszt jelent.
Title: Re: SID lejátszó
Post by: geco on 2017.January.24. 22:09:45
Nem emlékszem erre, vagy hogy miért pont ilyen legyen (azaz a háromszög például szinusz abszolút értékéhez hasonló), de nem lehetetlen. :oops: Talán a legjobb lenne megnézni a régebbi hozzászólásokat.
Nem ilyen torzításra emlékszem , olyanra hogy a magasabb értékek felé tolódjon a minta, tehát abból legyen több, ne legyen lineáris, de lehet álmodtam, mert a fórumon nem találok semmit :)
A kész verzióban átalakítom lineáris mintákká.
Title: Re: SID lejátszó
Post by: geco on 2017.January.24. 22:25:27
Na végre megszólalt, azt nem mondom ,hogy minden tökéletes, a zajjal vannak bajok, lesz még mit javítani, mire a kicsomagolás on the fly bekerül :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.24. 22:34:48
Tömörített lejátszáshoz tuti hasznos lesz az átalakított rutin, köszönöm szépen, még nem tudom, hogy mi lesz a megvalósítás, egyelőre az alap ötlet, hogy 500h egybefüggő "regiszter" adat, így 12*500h adat lesz csomagolva egy blokkba, vagy ezek többszöröse

Ezzel a megoldással (nem az egészet csomagolja ki, hanem mindig csak két blokkot, az aktuális lejátszása közben a "háttérben" készül el a következővel) a 8K blokk méret 682 50 Hz-es megszakításhoz elég: 682 * 12 = 8184 byte, és még marad 8 ahol tárolható például a ténylegesen használt adat mérete az utolsó blokknál. Ha a 3. lapra kerül a puffer, akkor a 0. és az 1. lapon lehet a bemeneti file (az itt tárolható tömörített adat korlátozza a méretét), az 1. és 2. lapon pedig a hangminták, az előbbit a megszakításkezelő rutin átmenetileg belapozza. A video RAM pedig a 3. lapon amikor az 50 Hz-es megszakítás a képernyőt frissíti. De nem tudom, megéri-e ilyen átalakítás.
Title: Re: SID lejátszó
Post by: geco on 2017.January.25. 08:51:40
Ezzel a megoldással (nem az egészet csomagolja ki, hanem mindig csak két blokkot, az aktuális lejátszása közben a "háttérben" készül el a következővel) a 8K blokk méret 682 50 Hz-es megszakításhoz elég: 682 * 12 = 8184 byte, és még marad 8 ahol tárolható például a ténylegesen használt adat mérete az utolsó blokknál. Ha a 3. lapra kerül a puffer, akkor a 0. és az 1. lapon lehet a bemeneti file (az itt tárolható tömörített adat korlátozza a méretét), az 1. és 2. lapon pedig a hangminták, az előbbit a megszakításkezelő rutin átmenetileg belapozza. A video RAM pedig a 3. lapon amikor az 50 Hz-es megszakítás a képernyőt frissíti. De nem tudom, megéri-e ilyen átalakítás.
A jobb tömöríthetőség miatt számoltam 12*500h-s blokkal, ami eleve elvetélt, elszámolt ötlet volt, de még így is meggondolandó, hogy egyszerre 2 blokkot csomagoljak ki, az elsőben lenne az 1. hat "regiszter", a másodikban meg a 2. hat, 2 szegmenssel megoldva, de ez még odébb van, egyelőre műödjön a felezett hangmintákkal rendelkező verzió az eredeti kicsomagolással :)
Egyelőre pont jónak tűnik a majd 8K-s kicsomagoló mostani verziója :) Ha esetleg a lapozás miatt kell alakítani valamit, majd hozzáalakítom a lejátszót;)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.25. 11:42:56
de még így is meggondolandó, hogy egyszerre 2 blokkot csomagoljak ki, az elsőben lenne az 1. hat "regiszter", a másodikban meg a 2. hat, 2 szegmenssel megoldva

Ezt nem egészen értem. :oops: A két blokk méretű puffernek az általam leírt megoldásban az a célja, hogy az egyik blokk lejátszása közben lehessen a következőt kicsomagolni (aminek az időtartama változó lehet, de elvileg elég gyors ahhoz, hogy a lejátszás ne tudja utolérni a kitömörítést):
- a lejátszás indítása előtt, még tiltott megszakításnál feltölteni a teljes puffert (2 blokk)
- utána a lejátszó rutin megszakításból elkezdi "fogyasztani" a C000h blokkot, amikor eléri a végét, akkor E000h-ra ugrik
- a főprogram figyeli a lejátszási pozíciót, ha átlép az E000h blokkra, akkor C000h-ra elkezdi kicsomagolni a következőt
- ezt követően ha az E000h-s blokk lejátszása is befejeződik, akkor a lejátszási pozíció C000h-ra ugrik, amit a főprogram figyel és elkezdi kitömöríteni a negyedik blokkot E000h-ra
- az előző három lépés ciklusban ismétlődik, ha elfogyott a tömörített adat, akkor az olvasási pozíciója visszaugrik az elejére ismétlődő lejátszáshoz

Egy blokkon belül az első 682 byte az első regiszterből 682 minta, utána a második regiszterből 682 minta, stb., ez összesen 682 * 12 = 8184 byte. A fennmaradó 8 byte fejléc céljára használható, ami jelezheti például ha a blokk valójában 682-nél kevesebb mintát tartalmaz (a mérete ilyenkor is 8K). Nem biztos, hogy ez a megoldás ideális, de a regiszterenként rendezett adatblokk talán jobban tömöríthető, ha valamivel bonyolultabb is a lejátszása.
Title: Re: SID lejátszó
Post by: geco on 2017.January.25. 13:13:40
Igen,  sejtettem, hogy ez a cél :) Én meg továbbgondoltam, a tömöríthetőség miatt, hogy mindezt lehetne 2 16K-s szegmenssel, ami a lejátszást bonyolítaná, egyik az aktív adat, a másik meg az épp kicsomagolásra kerülő adat, de még a holdban se járok, ezért az egész csak puszta elmélkedés.
Pont a tömörítés hatékonysága miatt (nem tudom még mennyivel lenne kisebb a kimeneti fájl, lehet meg sem éri) gondolkoztam el azon ,hogy duplázni az adatokat, és az első 8KB-ba csak az első hat blokk kerül, a másodikba a második 6 blokk, és a feljebb leírt módon lehet használni őket, ugyanaz, mint amit leírtál, csak lapozgatással, de gyanúsan tényleg nem éri meg, lehet le se tesztelem majd, ha odáig jutok.
Title: Re: SID lejátszó
Post by: geco on 2017.January.25. 13:21:24
Nem biztos, hogy ez a megoldás ideális, de a regiszterenként rendezett adatblokk talán jobban tömöríthető, ha valamivel bonyolultabb is a lejátszása.
Igen, ezen is gondolkoztam, hogyha marad elég idő, akkor esetleg érdemes-e az adatot szétszórni regiszter sorrendbe, és a mostani gyors ( veremkezelős kiolvasással olvasni ), vagy érdemes-e az általad elsőre használt regisztersorrendes tömörítésre áttérni, akkor a fájl nagyobb, de gyorsabb az olvasás.
Töprengésem jelenlegi állása szerint 2x8K-s 682 mintás megoldás tűnik a legoptimálisabb megoldásnak. :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.25. 14:53:49
Én meg továbbgondoltam, a tömöríthetőség miatt, hogy mindezt lehetne 2 16K-s szegmenssel, ami a lejátszást bonyolítaná, egyik az aktív adat, a másik meg az épp kicsomagolásra kerülő adat, de még a holdban se járok, ezért az egész csak puszta elmélkedés.

Az itt (https://enterpriseforever.com/sound/sid-lejatszo/msg61787/#msg61787) található egyszerű SID kártyás lejátszó valójában így működik (egy 16K-s blokk = 655 * 25 regiszter), a 8K-s változatot - ami bonyolítja a kicsomagoló rutint és a lejátszás 50 Hz-es részét - azért ajánlottam hogy a hangminta lejátszás közben ne kelljen sokat lapozni, és így még nem kerül gyakran használt szegmens video RAM-ba 128K-s gépen:
- 2 szegmens hangminta (1-2. lap)
- 1 szegmens (2*8K) puffer a tömörítetlen regiszter adat számára (3. lap)
- 1 szegmens bemeneti file puffer (1. lap), ez már lehet video RAM is a kevésbé intenzív hozzáférés miatt
Az is egy lehetőség hogy a hangminta memória csak egy szegmens méretű legyen, de akkor 32 helyett csak 16 táblázat lehet az egyes hullámformákhoz.

Igen, ezen is gondolkoztam, hogyha marad elég idő, akkor esetleg érdemes-e az adatot szétszórni regiszter sorrendbe, és a mostani gyors ( veremkezelős kiolvasással olvasni ), vagy érdemes-e az általad elsőre használt regisztersorrendes tömörítésre áttérni, akkor a fájl nagyobb, de gyorsabb az olvasás.

Az előbb említett lejátszónál legalábbis sokkal hatékonyabb ha mind a 25 regiszter külön 655 byte-os blokkba kerül, amit így tud lejátszani:
Code: ZiLOG Z80 Assembler
  1. .l1:    ld    hl, 8000h                 ; * sidDataReadPos
  2.         ld    de, 10000h - (655 + 1)
  3.         ...        ; puffer pozíció ellenőrzése, hogy elérte-e a blokk végét
  4. .l4:    ld    bc, 655 * 25 + 1
  5.         add   hl, bc
  6.         ld    bc, 190fh
  7. .l5:    ld    a, b
  8.         dec   a
  9.         out   (0eh), a
  10.         add   hl, de
  11.         outi
  12.         jr    nz, .l5
  13.         ld    (sidDataReadPos), hl
Tehát a ciklusban ADD HL, DE utasítás kell a következő regiszterhez. De ez 50 Hz-es frekvencián nem nagy probléma, ha 20-25% CPU idő marad erre akkor az még mindig kb. 16000-20000 Z80 ciklus. Az így rendezett 4 és fél perces Cybernoid II példa file tömörítve 11238 byte, ha viszont az egyszerűbben lejátszható R0,R1,...R24,R0,R1,... sorrendre konvertálom, akkor már 50918 byte a méret, ami lapozás nélkül nem fér el a memóriában.

A legjobb lenne tesztelni a tömörítést már konvertált 12 regiszteres SID adaton is.

Szerk.: blokk méretek összehasonlítása, ez nem egészen pontos, de nagyjából látható a hatása a tömörítésre. 12 regiszternél valószínűleg kisebb blokk is elég hasonló hatékonysághoz, bár ezt még nem teszteltem.

1024: 55684 byte
2048: 34422 byte
4096: 23209 byte
8192: 16202 byte
16384: 11239 byte
32768: 8700 byte
65536: 7353 byte
Title: Re: SID lejátszó
Post by: geco on 2017.January.25. 15:58:28
Tehát a ciklusban ADD HL, DE utasítás kell a következő regiszterhez. De ez 50 Hz-es frekvencián nem nagy probléma, ha 20-25% CPU idő marad erre akkor az még mindig kb. 16000-20000 Z80 ciklus. Az így rendezett 4 és fél perces Cybernoid II példa file tömörítve 11238 byte, ha viszont az egyszerűbben lejátszható R0,R1,...R24,R0,R1,... sorrendre konvertálom, akkor már 50918 byte a méret, ami lapozás nélkül nem fér el a memóriában.
Engem ez meg is győzött, sorrendbe rendezett regiszterek nem lesznek tömörítve, marad az ugrálós lejátszás, és dobom is ki a veremkezelős olvasást, legalább az olvasás alatt is engedélyezett lesz az interrupt (igaz, a mostani olvasás mellett se nagyon volt interrupt vesztés)

A legjobb lenne tesztelni a tömörítést már konvertált 12 regiszteres SID adaton is.

Szerk.: blokk méretek összehasonlítása, ez nem egészen pontos, de nagyjából látható a hatása a tömörítésre. 12 regiszternél valószínűleg kisebb blokk is elég hasonló hatékonysághoz, bár ezt még nem teszteltem.

1024: 55684 byte
2048: 34422 byte
4096: 23209 byte
8192: 16202 byte
16384: 11239 byte
32768: 8700 byte
65536: 7353 byte
Az 1-12-ig rendezett adaton nem tudom érdemes-e a fentieket látva, de letesztelem, a lenti táblázat alapján a 8192 pedig ideális választás.
Köszönöm szépen az infót, és SID kártyás lejátszó leírást, szerintem maradok a két szegmens hangmintánál, meg szeretném tartani a dinamikus PWM állítási lehetőséget.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.25. 19:59:29
Készítettem SID adat konvertáló programot is, ennek a kimenete (továbbra is ugyanazzal a Cybernoid II példával) 8354 byte tömörítve ha 8K a blokk méret, és 6640 byte 16K esetén. De nem tudom, jó-e a konverzió, mert nincs mivel lejátszani. :) Különösen a burkológörbe emulációnál fordulhat elő hiba. A program a sidrec.lua (https://enterpriseforever.com/sound/sid-lejatszo/msg61779/#msg61779) kimenetét konvertálja.

[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.January.26. 08:44:23
Készítettem SID adat konvertáló programot is, ennek a kimenete (továbbra is ugyanazzal a Cybernoid II példával) 8354 byte tömörítve ha 8K a blokk méret, és 6640 byte 16K esetén. De nem tudom, jó-e a konverzió, mert nincs mivel lejátszani. :) Különösen a burkológörbe emulációnál fordulhat elő hiba. A program a sidrec.lua (https://enterpriseforever.com/sound/sid-lejatszo/msg61779/#msg61779) kimenetét konvertálja.

Könnyen megeshet, hogy a burkológörbe emuláció jobb, mint a SIDPlayerben :D
Egyelőre még küzdök az eredeti verzió átalakításával, nem kezdtem el még az új csomagolós lejátszást :oops:
Megy, de satnyán szól, kiszedtem belőle az osztó táblát, a zaj tábla 256 nem ismétlődő elemet tartalmaz.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.26. 11:34:51
Könnyen megeshet, hogy a burkológörbe emuláció jobb, mint a SIDPlayerben :D

Elsősorban nem a minőség a probléma, legalábbis az 50 Hz-es mintavételezés korlátai között, hanem hogy bugos lehet. :oops: Az emuláció valójában 1 MHz-es, és azt konvertálja 50 Hz-re a 20000 ciklus alatti átlagos szint számításával. Ez ugyan pazarló megoldás, de így is elfogadható a sebessége, és könnyen átalakítható lenne 50 Hz helyett más frekvenciára. A burkológörbe generátor pontos működéséről itt (https://github.com/istvan-v/ep128emu/blob/master/resid/envelope.cpp) és itt (https://github.com/istvan-v/ep128emu/blob/master/resid/envelope.hpp) lehet olvasni (reSID forráskód), a konvertáló program azonban ennél egyszerűbb.

A kimeneti formátum leírása:
* minden csatorna 4 "regiszter"
* ezek közül az első a frekvencia alsó 8 bitje, zaj esetén a frekvenciát a program 4 bittel jobbra lépteti
* a második a frekvencia felső 8 (illetve zajnál csak 4 marad) bitje
* a harmadik az aktuális hangerő 5 biten (0..31), ez tartalmazza a burkológörbét és a 24-es SID regisztert is
* a negyedik a hullámforma és a PWM:
- 7. bit = gyűrűmoduláció
- 5-6. bit = hullámforma (00h: háromszög, 20h: fűrész, 40h: négyszög, 60h: zaj)
- 0-4. bit = kitöltési tényező felső 5 bitje, csak négyszögjelnél, egyébként mindig 0
Ha nincs hullámforma kiválasztva vagy a "teszt" bit beállított, akkor a negyedik byte 40h, azaz 0 kitöltési tényezőjű "négyszögjel". Több hullámforma egyidejű engedélyezése esetén (a valódi hardvertől eltérően) csak az egyik érvényes, zaj > fűrész > négyszög > háromszög prioritással.

Egy blokkon belül (amelynek a mérete a parancssorban állítható, alapértelmezés szerint 8192) először az első csatorna első regiszterének az összes értéke található, utána a második regiszter, stb. Az utolsó két byte a blokkban ténylegesen használt minták száma, ami általában 682, de az utolsóban kevesebb is lehet.

A kimeneti file tömörítése a decompress_m2_8K rutinnal kompatibilis formátumban:

epcompress -raw -m2 -9 -blocksize 8192 -maxoffs 8192 dave_data.bin dave_data.bin

Kisebb javítások:
[attachurl=1]
[attachurl=2]

A sidrec.lua a trigger bit 0->1 átmeneténél az előző megszakításban 0-ra állítja. Ennek az a célja, hogy ha csak nagyon rövid ideig 0 (az előző értéke 1 volt, és az aktuális megszakítás 0-ra állítja majd azonnal újra 1-re új hang indításához), akkor ez az információ ne vesszen el. A sid_conv.cpp-ben javítottam azt az esetet ha nincs kiválasztott hullámforma, ez most 0 hangerejű és kitöltési tényezőjű négyszögjel lesz.

Szerk.: négyszögjelnél probléma lehet még a hangerő szabályozása, a XOR-olós módszer valójában 1,3,5,7,... szinteket állít be, azaz nulla hangerőnél is van hang. :oops: Talán célszerűbb lenne a hangminta táblázatokban 0 és 63 értékeket használni, a XOR helyett pedig AND utasítást, így azonban a négyszögjel hangerejét 2-vel szorozni kellene, a többi hullámformánál pedig a XOR 0-t AND 63-ra cserélni.
Title: Re: SID lejátszó
Post by: geco on 2017.January.26. 14:45:56
Szerk.: négyszögjelnél probléma lehet még a hangerő szabályozása, a XOR-olós módszer valójában 1,3,5,7,... szinteket állít be, azaz nulla hangerőnél is van hang. :oops: Talán célszerűbb lenne a hangminta táblázatokban 0 és 63 értékeket használni, a XOR helyett pedig AND utasítást, így azonban a négyszögjel hangerejét 2-vel szorozni kellene, a többi hullámformánál pedig a XOR 0-t AND 63-ra cserélni.
Úgy emlékszem, hogy a négyszögjel alap adatok 1fh, és 20fh, tehát valóban, ha nulla a hangerő, akkor is van minimális hang, de a többi jelnél a XOR lecserélődik AND-re. A régi 512 byte-os mintával sokkal szebben szól, van egy ötletem mi okozhatja a hibát, ma kipróbálom.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.26. 16:32:19
Tesztelés céljára:
[attachurl=1]
[attachurl=2]
Title: Re: SID lejátszó
Post by: geco on 2017.January.26. 19:26:51
Közben rájöttem, hogy azért csináltam a 3 pwm táblát, mert minden csatornának megvolt a sajátja, ha esetleg ugyanabba a range-be több csatorna esne, de eltérő PWM-mel. Négyszögjel esetén ha 0 a hangerő, akkor AND 00h kerül be a regiszter írás elé :)

Nálam ez a felállás:
00   freq low      (a teljes frekvencia érték)
01   freq high
02   b7-b5 waveforms + b3-b0 volume (00h triangle, 20 sawtooth, 40h pulse, 80h noise(ez már az envelope és a 24-es regiszter által előállított aktuális hangerő)
03   b7 ring mod + b6-b0 pulse waveform

A 2. byte-ot nagy munka lenne nálad átalakítani? Azért kérdem mert nálam erre épül a 256-os ugrótábla.
A hangerő nálam csak 4 bit, nálad 5, de az nem számít, az ugrótáblámba se, és akkor átalakítom úgy a SIDPlayer ezen verzióját, hogy duplázza a hangerőt, a frekvencia elrendezést is a tied alapján, ez sokkal jobb is, mert nem kell előfeldolgozni.
A kitöltési tényezőből minf a 7 bit ki van használva :) 16 tábla, és minden egyes táblán belül 8 dinamikus változtatási lehetőség.
Megvan a satnya hang oka is :) Rosszul tértem át a 256 byte-es "sample"-kra, pont a dinamikus kitöltésnél feleztem két helyen, ahol nem kellett volna :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.26. 20:02:10
A 2. byte-ot nagy munka lenne nálad átalakítani? Azért kérdem mert nálam erre épül a 256-os ugrótábla.

Megoldható, csak feltételeztem, hogy javítja a tömöríthetőséget ha a hangerő nincs összekeverve a hullámformával, mivel ugyanazt a burkológörbét több hullámforma is használhatja. De nem tudom, ez valóban jelentős-e a gyakorlatban.

Quote
A kitöltési tényezőből minf a 7 bit ki van használva :) 16 tábla, és minden egyes táblán belül 8 dinamikus változtatási lehetőség.

Ha már dinamikus változtatás, akkor talán lehetne 8 bites is, táblázat nélkül. :)

Code: ZiLOG Z80 Assembler
  1.         ld    a, h
  2. .l3:    and   00h                       ; *
  3.         xor   d
  4.  
  5. ; négyszögjel
  6.         cp    PWM
  7.         sbc   a, a
  8.         and   VOLUMEx2
  9.  
  10. ; egyéb hullámformák
  11.         ld    bc, 4000h
  12.         ld    c, a
  13.         ld    a, (bc)
  14.  
  15.         out   (0a9h), a

Itt 5 byte kódot kell cserélni csatornánként a megszakításkezelő rutinban, ami viszont gyorsul egy keveset. De a 8 bites PWM-nél a gyűrűmoduláció is a hangerő regiszterbe kerül, és 2 bites lesz a hullámforma, tehát módosítani kell az ugrótáblát (de lehet, hogy ugrótábla nélkül is elég gyors lenne a kód).
Title: Re: SID lejátszó
Post by: geco on 2017.January.26. 20:30:54
Ha már dinamikus változtatás, akkor talán lehetne 8 bites is, táblázat nélkül. :)
Itt 5 byte kódot kell cserélni csatornánként a megszakításkezelő rutinban, ami viszont gyorsul egy keveset. De a 8 bites PWM-nél a gyűrűmoduláció is a hangerő regiszterbe kerül, és 2 bites lesz a hullámforma, tehát módosítani kell az ugrótáblát (de lehet, hogy ugrótábla nélkül is elég gyors lenne a kód).
Egy zseni vagy :) Dobom az ugrótáblát, amúgy is sokat gyorsult a lejátszó rutin a 256 byte-os hangok miatt, én 5 értéket néztem, ha egyik bit se volt állítva, akkor nullázta a frekvenciát. A módosítással meg kell 4 értéket vizsgálni, pont jó lesz, és ráadásul elmarad 7 darab push, és még pár utasítás ha a pulse waveform változik
Amúgy már így is felére esett össze a program , mind a betöltendő file, mind a memóriában szétterült :)
Egyelőre ezt a módosítást jegelem, szerintem holnap rátérek a menet közbeni kicsomagolásra.

De akkor ez lesz, ha jól értem:
00   freq low      (zajnál 4 bittel eltolva jobbra, 01-re is)
01   freq high
02   b7 ring mod + b6-b5 waveforms + b4-b0 volume (00h triangle, 20 sawtooth, 40h pulse, 60h noise)
03   b7-b0 pulse waveform
és minden bitet kihasználtunk :)
Title: Re: SID lejátszó
Post by: geco on 2017.January.26. 21:42:54
Leteszteltem a 682 és a 1364 1 regiszter adathosszúsággal mentett fájlok tömöríthetőségét, és érdekes volt, hogy 8192-es blokkok esetén a 682-es kisebb lett:
eredeti file: 147312 byte volt
LZ-vel csomagolva a régi lejátszóhoz egy regiszter 12008 byte: 6475 byte

682 byte adathossz
commands4096.00     14943 byte
commands8192.00      9384 byte
commands16384.00     8330 byte
commands32768.00     7770 byte
1364 byte adathossz
commands4096.01     12327 byte
commands8192.01     11403 byte
commands16384.01     7933 byte
commands32768.01     7283 byte

blocksize és maxoffs nélküli csomagolás M2-vel:
commandn.00          7139 byte
commandn.01          6732 byte

Teljesen jónak tűnik a 8192-es megoldás 682-es hosszal:)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.26. 22:27:50
De akkor ez lesz, ha jól értem:
00   freq low      (zajnál 4 bittel eltolva jobbra, 01-re is)
01   freq high
02   b7 ring mod + b6-b5 waveforms + b4-b0 volume (00h triangle, 20 sawtooth, 40h pulse, 60h noise)
03   b7-b0 pulse waveform

Módosított konvertáló program, aminek a kimenete ilyen formátumú:
[attachurl=1]

Lua lejátszó:
[attachurl=2]
[attachurl=3]
[attachurl=4]
[attachurl=5]

A 8 bites PWM azonban növeli a file méretét, ha ez probléma, akkor mégis célszerűbb lehet csak 7 bitet tárolni. Így viszont felszabadulhat egy bit 6 bites hangerő céljára, bár ezt nagyobb táblázatok nélkül csak a négyszögjel tudná kihasználni:
[attachurl=6]
Title: Re: SID lejátszó
Post by: geco on 2017.January.27. 08:41:25
Módosított konvertáló program, aminek a kimenete ilyen formátumú:
Köszi szépen.
A 8 bites PWM azonban növeli a file méretét, ha ez probléma, akkor mégis célszerűbb lehet csak 7 bitet tárolni. Így viszont felszabadulhat egy bit 6 bites hangerő céljára, bár ezt nagyobb táblázatok nélkül csak a négyszögjel tudná kihasználni:
Annyival csak nem növeli a méretét, szerintem maradjunk a 8 bites PWM-nél, a PWM-es megoldásodnak köszönhetően sztem befér az egész program egy szegmensbe, így 32KB csomagolt adat is belapozható egyszerre.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.27. 12:21:22
Köszi szépen.Annyival csak nem növeli a méretét, szerintem maradjunk a 8 bites PWM-nél, a PWM-es megoldásodnak köszönhetően sztem befér az egész program egy szegmensbe, így 32KB csomagolt adat is belapozható egyszerre.

Én úgy számoltam, hogy a bemeneti adat az első két lapon lehet, azaz a teljes 1. lap és a 0. lapon a maradék szabad hely. De ha a file mérete nem túl nagy, akkor még az is egy lehetőség hogy az 1. lapnak csak az első felét használja, akkor megtakarítható a lapozás a hangminta lejátszó rutinban.

Lapozással:
- 0000h - <2000h: kód
- <2000h - 7FFFh: bemeneti file (az 1. lapon lefoglalt szegmens lehet video RAM is 128K-s gépen)
- 4000h - 9FFFh: hangminta táblázatok (3 * 8K, az 1. lapot a megszakításkezelő rutin átmenetileg belapozza), ez lehetőleg ne legyen video RAM
- A000h - BFFFh: szabad, itt lehet kód is, egyéb táblázatok, stb., vagy a sid_conv_2.cpp használata esetén az egyik hullámforma 6 bites hangerővel
- C000h - FFFFh: kicsomagolt bemeneti adat, itt sem előnyös a video RAM

Vagy:
- <2000h - 9FFFh: bemeneti file
- 4000h - 7FFFh, A000-BFFFh: hangminta táblázatok
Így a hangminták nem összefüggő területre kerülnek (amit nem nehéz megoldani), viszont még nagyobb lehet a bemeneti file.

Lapozás nélkül:
- 0000h - <2000h: kód
- <2000h - 5FFFh: bemeneti file
- 6000h - BFFFh: hangminta táblázatok
- C000h - FFFFh: kicsomagolt bemeneti adat

Az eredeti verzióban a hangminták tömörített formátumban találhatók, azonban az új táblázatok így lényegesen nagyobb méretűek lennének, elsősorban az ismétlődés nélküli zaj minták miatt. Ezzel a Lua scripttel generálva az adatot:
[attachurl=1]
a file kb. 8000 byte méretű lesz "-m2 -blocksize 8192 -maxoffs 8192" tömörítéssel, vagy 6500 byte -m0 formátumban. Bár a tömörített táblázatok és az esetleges M0 rutin betöltés után szabadon felülírhatók. A math.randomseed-es sor törlésével minden hangerőnél eltérő lenne a zaj minta, nem tudom biztosan, hogy ez jobb hangot eredményez-e (kevésbé ismétlődik, de a hangerő modulálja).

Egy másik lehetséges megoldás Z80 kóddal generálni a táblázatokat, ez csak 128 byte és talán jobban is optimalizálható, a futásideje azonban 1.86 másodperc letiltott memória várakozással, ami lassabb lehet a kitömörítésnél. Valamivel gyorsabb lehetne a hármoszögjelet a fűrészből előállítva (vagy fordítva), mivel a hangminta értékek mindkettőnél azonosak, csak a sorrend változik. :) Szerk.: a fűrészjel pedig szorzás nélkül is megoldható lenne, hasonlóan a vonal rajzolásra használt algoritmushoz.
[attachurl=2]
A zaj itt is átalakítható hogy minden hangerőnél eltérő legyen, a "jr nz, .l4" utasítást kell "jr nz, .l5"-re cserélni.
Title: Re: SID lejátszó
Post by: geco on 2017.January.27. 13:14:55
Egy másik lehetséges megoldás Z80 kóddal generálni a táblázatokat, ez csak 128 byte és talán jobban is optimalizálható, a futásideje azonban 1.86 másodperc letiltott memória várakozással, ami lassabb lehet a kitömörítésnél. Valamivel gyorsabb lehetne a hármoszögjelet a fűrészből előállítva (vagy fordítva), mivel a hangminta értékek mindkettőnél azonosak, csak a sorrend változik. :) Szerk.: a fűrészjel pedig szorzás nélkül is megoldható lenne, hasonlóan a vonal rajzolásra használt algoritmushoz.
A zaj itt is átalakítható hogy minden hangerőnél eltérő legyen, a "jr nz, .l4" utasítást kell "jr nz, .l5"-re cserélni.
Szuper, ez nekem szimpibb, most én is legenerálom, de a magam egyszerű módján, így kevesebb a hely, az egész tábla és kód elfér a 0-ás lapon, vagy ha nem, akkor a FILEkezelőt átteszem egy egy másik szegmensre.elméletileg semmit se kell lapozgatni (kivéve a display miatt a videó memóriát az 50Hz-es megszakításban)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 10:22:35
Optimalizált táblázat generálás:
[attachurl=1]

Ez 0.9 másodperc alatt fut le, és rövidebb is az első verziónál (128 helyett 116 byte), a kimenete pedig azonos. Így már talán megfelelő sebességű a tömörített táblázatokhoz képest is.

Még egy lehetséges fejlesztés, hogy a hangminta lejátszás frekvenciája ne csak 7.8125 vagy 15.625 kHz lehessen, hanem a Z80 órajeltől függően gyorsuljon, azaz például 10 MHz-es gépen még nagyobb lehessen, és a 6 és 7.12 MHz-nek is legyen előnye. Így ugyan bonyolultabb a frekvencia konverzió (8*16->24 bites szorzás), de szerintem lenne rá idő. Bár nem tudom, megéri-e, a legtöbben valószínűleg 4 MHz-es gépen futtatnák a programot.
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 11:20:42
Optimalizált táblázat generálás:

Ez 0.9 másodperc alatt fut le, és rövidebb is az első verziónál (128 helyett 116 byte), a kimenete pedig azonos. Így már talán megfelelő sebességű a tömörített táblázatokhoz képest is.
Köszönöm szépen :) Eljutottam már odáig, hogy az új elrendezésű adatokat játsza le (még nem teszteltem, fájlt még nem generáltam hozzá) "folyamatos" kicsomagoló rutinoddal :), és javítottam az EXOS kompatibilitási hibát.
Még egy lehetséges fejlesztés, hogy a hangminta lejátszás frekvenciája ne csak 7.8125 vagy 15.625 kHz lehessen, hanem a Z80 órajeltől függően gyorsuljon, azaz például 10 MHz-es gépen még nagyobb lehessen, és a 6 és 7.12 MHz-nek is legyen előnye. Így ugyan bonyolultabb a frekvencia konverzió (8*16->24 bites szorzás), de szerintem lenne rá idő. Bár nem tudom, megéri-e, a legtöbben valószínűleg 4 MHz-es gépen futtatnák a programot.
Jó ötlet, tuti van rá idő ,mert a jelenlegi állás szerint a processzoridő 30-40%-a szabad ,és ezt csak turbós gépen kéne végrehajtani, megspóroltam a lapozásokat, csak egy van az 50Hz-es megszakításban a display miatt.
0-ás lapon a program, és a 3 tábla, 1-es, 2-es lapon a csomagolt adat, és a 3-as lapon a kicsomagolt.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 11:44:23
még nem teszteltem, fájlt még nem generáltam hozzá

Ha a formátum nem változott ehhez (https://enterpriseforever.com/sound/sid-lejatszo/msg61844/#msg61844) a leíráshoz képest, akkor az itt (https://enterpriseforever.com/sound/sid-lejatszo/msg61847/#msg61847) található dave_data.bin példával működnie kellene.

Quote
0-ás lapon a program, és a 3 tábla

Ezt nem egészen értem, a táblázatok nem 24K területet igényelnek? :oops: Legalábbis 5 bites hangerőnél, 3 * 32 * 256 = 24576. Vagy van megoldás arra, hogy kisebb helyen is elférjen, esetleg marad a 4 bites hangerő (nem tudom, mennyire hallható a különbség)?
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 12:03:29
Ha a formátum nem változott ehhez (https://enterpriseforever.com/sound/sid-lejatszo/msg61844/#msg61844) a leíráshoz képest, akkor az itt (https://enterpriseforever.com/sound/sid-lejatszo/msg61847/#msg61847) található dave_data.bin példával működnie kellene.
Köszi, pár perce eszembe jutott nekem is körülnézni, csak nem jutottam odáig.
A sidrec.lua hogy működik?
Betöltöttem a SIDPLAY-t elindítottam a sidre.lua-t, de nem csinált semmit, mit szúrtam el?

Ezt nem egészen értem, a táblázatok nem 24K területet igényelnek? :oops: Legalábbis 5 bites hangerőnél, 3 * 32 * 256 = 24576. Vagy van megoldás arra, hogy kisebb helyen is elférjen, esetleg marad a 4 bites hangerő (nem tudom, mennyire hallható a különbség)?
A 3*16*256-nál maradtam a tábláknál, nem tudom mennyire hallható a különbség, szerintem jó lesz :) a négyszögjel használja a 32 hangerő értéket.
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 12:11:26
Ja, az utolsó 8 byte-ra azt találtam ki, hogy ebből az utolsó 2 a hosszt tárolja úgy, hogy 682 - betöltött bájtok, ha az egész 8Kb-s blokk adatot tartalmaz, akkor 0000h lesz az értéke, ha csak 300 byte aktív adat van regiszterenként, akkor 382 lesz az értéke.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 12:13:53
Köszi, pár perce eszembe jutott nekem is körülnézni, csak nem jutottam odáig.
A sidrec.lua hogy működik?

Csak SID kártya módban használható, ilyenkor a 0Fh portra írt regiszter értékeket menti. A file név a kód elején állítható. Problémát jelenthet hogy a SIDPLAY alapértelmezés szerint DAVE módban indítja a lejátszást, ezért azt mindig át kell állítani, és a zene eleje így elveszhet. :oops:

Quote
A 3*16*256-nál maradtam a tábláknál, nem tudom mennyire hallható a különbség, szerintem jó lesz :) a négyszögjel használja a 32 hangerő értéket.

Ha a bemeneti file nem túl nagy (6000h alatt elfér, ami ~20K méret lehet), akkor lapozás nélkül is megoldható az 5 bites hangerő. De még lapozással is gyorsabb a régi 9 bites táblázat címzésű lejátszó rutinnál. Lapozás nélkül viszont talán egy keveset lehetne növelni a frekvencián még 4 MHz-en is. Esetleg lehetne külön 4 bites verzió is ami nagyobb file méretet támogat, nem tudom, milyen gyakran lenne kevés a 20K. A tömörítésen is lehetne javítani valamennyit egy módosított epcompress verzióval, a -maxoffs használható értéke ugyanis változik a blokkon belül, az elején 8192, az utolsó byte-nál azonban még a 16383 is működne, így a fix 8192 nem optimális.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 12:32:42
Jobban meggondolva nem is kell módosított epcompress, mivel az adat egy 16K méretű cirkuláris pufferbe kerül, valójában a -blocksize 8192 -maxoffs 16384 eredményezi a leghatékonyabb tömörítést ami még használható a lejátszóban. :oops:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 12:42:55
Ja, az utolsó 8 byte-ra azt találtam ki, hogy ebből az utolsó 2 a hosszt tárolja úgy, hogy 682 - betöltött bájtok, ha az egész 8Kb-s blokk adatot tartalmaz, akkor 0000h lesz az értéke, ha csak 300 byte aktív adat van regiszterenként, akkor 382 lesz az értéke.

Módosítva:
[attachurl=1]    (fordítás: g++ -Wall -O2 -march=native sid_conv.cpp -o sid_conv -lm -s)

A -maxoffs 16384 a korábbi Cybernoid II példa méretét 9148-ról 7967 byte-ra csökkentette. :)
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 12:53:59
Csak SID kártya módban használható, ilyenkor a 0Fh portra írt regiszter értékeket menti. A file név a kód elején állítható. Problémát jelenthet hogy a SIDPLAY alapértelmezés szerint DAVE módban indítja a lejátszást, ezért azt mindig át kell állítani, és a zene eleje így elveszhet. :oops:
Eddig stimmt, nyomtam bőszen az F3-at miután megadtam a betöltendő file-t.
f = io.open("sid_data.bin", "wb")-re írtam át, hagytam egy darabig futni, majd nyomtam egy ESC-et, és elkezdtem keresgélni a fájlkeresővel, nem találta, annyi, hogy Winfos alatt futtattam, Linux alatt megpróbáltam, de valami nem tetszik neki, be se tölti a sidplay-t, amikor betöltené a PRG-t, dob az EXOS 1 egy 0CFh-t (File IO, EXDOS nélkül), úgy emlékszem ez EXDOS hiba, most meg is néztem, File not found.
Ha a bemeneti file nem túl nagy (6000h alatt elfér, ami ~20K méret lehet), akkor lapozás nélkül is megoldható az 5 bites hangerő. De még lapozással is gyorsabb a régi 9 bites táblázat címzésű lejátszó rutinnál. Lapozás nélkül viszont talán egy keveset lehetne növelni a frekvencián még 4 MHz-en is. Esetleg lehetne külön 4 bites verzió is ami nagyobb file méretet támogat, nem tudom, milyen gyakran lenne kevés a 20K. A tömörítésen is lehetne javítani valamennyit egy módosított epcompress verzióval, a -maxoffs használható értéke ugyanis változik a blokkon belül, az elején 8192, az utolsó byte-nál azonban még a 16383 is működne, így a fix 8192 nem optimális.
Szerinted sokat számítana az 5bites hangerő használata a háromszög, fűrész, és zaj használatánál?
Szívesen átalakítom lapozósra, elméletileg most járunk 298+interrupt T-state-nél a lapozással 334+interrupt, 12 KHz-es lejátszásra egyikkel sem lehetne áttérni.
Azt én sem, hogy milyen gyakran lenne kevés a 20K, most megéztem a régi verzióhoz készült fájlokat, az egyik 21K-s, de a következő legnagyobb már csak 11K, az új verziónál lesz egy kis növekmény.
Nyerünk a módosított EPCOMPRESS-szel annyit, hogy érdemes csak ezért módosítani?
Elég jó file méreteket kapunk.
Mit ajánlasz, legyen két verzió, az egyik lapozós, a másik nem, és ez 10KHz-en fusson, és mind a kettő 5 bites?

Ja, első hangzásra az általad generált file jobban szól, mint az én régim, viszont szerintem az envelope emuláció egy helyen gyorsabban lefutó adatot generált, a többi helyen jónak tűnik. (rögtön az elején a 2 csatornán)
Ja, ne ijedj meg, ez még az én gagyi sampléimat használja :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 13:10:10
Eddig stimmt, nyomtam bőszen az F3-at miután megadtam a betöltendő file-t.
f = io.open("sid_data.bin", "wb")-re írtam át, hagytam egy darabig futni, majd nyomtam egy ESC-et, és elkezdtem keresgélni a fájlkeresővel, nem találta

Ez az aktuális (rendszer, nem Alt+F) könyvtárba próbál menteni, ami nem biztos, hogy írható (pl. C:\Program Files\ep128emu2 normál felhasználóként). De akkor elvileg hibát kellene eredményeznie, bár Windowson nem lehet biztosan tudni. :oops: A legjobb lenne teljes útvonalat megadni, akkor egyértelmű hogy hol lesz a file. :)

Quote
Linux alatt megpróbáltam, de valami nem tetszik neki, be se tölti a sidplay-t, amikor betöltené a PRG-t, dob az EXOS 1 egy 0CFh-t (File IO, EXDOS nélkül), úgy emlékszem ez EXDOS hiba, most meg is néztem, File not found.

Talán az Alt+F nem jól van beállítva? A PRG-t már ott keresi.

Quote
Szerinted sokat számítana az 5bites hangerő használata a háromszög, fűrész, és zaj használatánál?

Kisebb hangerőnél szerintem észrevehető lehet (a SID burkológörbe generátora eredetileg 8 bites), de a legjobb lenne kipróbálni és összehasonlítani.

Quote
Szívesen átalakítom lapozósra, elméletileg most járunk 298+interrupt T-state-nél a lapozással 334+interrupt, 12 KHz-es lejátszásra egyikkel sem lehetne áttérni.

Ha 12-re nem is lehetne növelni, még a 9 is jobb lenne valamivel. :)

Quote
Nyerünk a módosított EPCOMPRESS-szel annyit, hogy érdemes csak ezért módosítani?

Amint írtam, valójában egyszerű -maxoffs 16384 is működne a rendes verzióval, és az szerintem 20K alá csökkentené a legnagyobb file méretét, ha a javulás mértéke hasonló a Cybernoid II-höz.

Quote
viszont szerintem az envelope emuláció egy helyen gyorsabban lefutó adatot generált, a többi helyen jónak tűnik.

Az nem kizárt, hogy a burkológörbe emuláció bugos (a reSID alapján készült, de egyszerűsítve), még tesztelni kellene. :oops: De ha csak a file elején van hiba, akkor a mentésnél (sidrec.lua) is lehetett a probléma. A script akkor sem működik megbízhatóan, ha egy megszakítás alatt többször változik a trigger bit állapota (ezt részben már javítani próbáltam, de a Cybernoid II felvétel még a régebbi verzióval készült), talán jobb lenne a korábbi esemény alapú formátumra alakítani ha a mentett file egyébként is csak a sid_conv bemenete lesz.
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 13:23:22
Ez az aktuális (rendszer, nem Alt+F) könyvtárba próbál menteni, ami nem biztos, hogy írható (pl. C:\Program Files\ep128emu2 normál felhasználóként). De akkor elvileg hibát kellene eredményeznie, bár Windowson nem lehet biztosan tudni. :oops: A legjobb lenne teljes útvonalat megadni, akkor egyértelmű hogy hol lesz a file. :)
Érdekes, mert a snapshotot oda mentette, nálam bonyolultabb a helyzet :) X meghajtóként van bamappolva a Linux Home könyvtáramban egy könyvtár azon belül van az ep128emu2, és azon belül vannak a játszós könyvtáraim is :), hacsak tényleg nem az eredeti helyére próbálna menteni, na majd adok meg egy elérési utat.
Talán az Alt+F nem jól van beállítva? A PRG-t már ott keresi.
Mostanában a Working Directory beállítása macerásabb linux alatt, ha bemegyek a könyvtárba, save -re nem áll át, csak ha beírom a könyvtár nevét, elméletileg jónak kéne lennie, mert F1-re is az ugrik fel.
Ha 12-re nem is lehetne növelni, még a 9 is jobb lenne valamivel. :)
Én hiszek neked :)
Amint írtam, valójában egyszerű -maxoffs 16384 is működne a rendes verzióval, és az szerintem 20K alá csökkentené a legnagyobb file méretét, ha a javulás mértéke hasonló a Cybernoid II-höz.
Csak később olvastam, mint én írtam :) Eddig azt hittem, hogy 16384-es maxoffs-szal nem működik a 8K-s kicsomagoló :).
Az nem kizárt, hogy a burkológörbe emuláció bugos (a reSID alapján készült, de egyszerűsítve), még tesztelni kellene. :oops:
De :) , úgy fest én szúrtam el valamit, áttértem a 2K-s táblázataidra, és a probléma volt-nincs, és szerintem teljesen jól szól, egy helyen hallottam érdekességet, de azt nem tudom mi lehet, még. A mostani állás szerint 6000h hosszú lehet a file, de még 400h-val lejjebb is vihetném a betöltés helyét.
Vagyis nem, mert jól felülcsaptam a zaj utolsó részét.
elméletileg 6c00h-ra tölthető a fájl.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 13:27:58
Mostanában a Working Directory beállítása macerásabb linux alatt, ha bemegyek a könyvtárba, save -re nem áll át, csak ha beírom a könyvtár nevét

Ez a Gtk-s file választó ablak bosszantó tulajdonsága, nem belépni kell a könyvtárba, hanem csak a felette levőben kiválasztani.

Szerk.: egy kevés helyet azzal is meg lehetne takarítani, ha nem lennének 0 hangerejű táblázatok és a konvertáló program 0 hangerő helyett 0 kitöltési tényezőjű négyszögjelet írna.
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 13:51:39
Szerk.: egy kevés helyet azzal is meg lehetne takarítani, ha nem lennének 0 hangerejű táblázatok és a konvertáló program 0 hangerő helyett 0 kitöltési tényezőjű négyszögjelet írna.
Jó ötlet, és még átteszem a file választót egy másik szegmensre, ezzel is pár KB-ot.
SIDREC.LUA is műxik már, ha megadom az útvonalat is :)
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 14:10:31
Hogy kell a sid_conv-t használni?
./sid_conv infile outfile -lal mintha a default beviteli eszközről kérné az adatot, a billentyűzetről.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 14:24:57
Vagyis nem, mert jól felülcsaptam a zaj utolsó részét.

Ha a táblázatok a sidwavs8.s-el készültek, az 2000h-val osztható kezdőcímet tételez fel. :oops: De ez a verzió már nem, és a 0 hangerejű táblázatokat sem generálja, tehát csak 5D00h a teljes méret:
[attachurl=1]

./sid_conv infile outfile -lal mintha a default beviteli eszközről kérné az adatot, a billentyűzetről.

./sid_conv < infile > outfile

Paraméterként megadható a blokk méret, ami alapértelmezés szerint 8192.
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 14:34:09
Kúúúl, köszi, és köszi, konvertált a SID_CONV :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 14:37:22
0 hangerejű hullámformák cseréje 0 kitöltési tényezőjű négyszögjelre:
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 14:42:45
0 hangerejű hullámformák cseréje 0 kitöltési tényezőjű négyszögjelre:
Arra gondoltam, hogy ezt megoldom a programban magában, elméletileg csak pár bájt + (mondjuk 10-30)
Mit szólsz?
4 byte lett :)
Ha 0 a hangereje a 3 jel valamelyikének, akkor 0-ra állítja a pwm regiszert, és ráugrik a négyszögjel feldolgozásra, a hangerő regiszter amúgy is 0 volt.
Sőt, legyen mind a kettő, ezt a sid_conv-ot fogom használni, ha esetleg elkészül a siplay ilyen formában mentő verziója, és valaki azzal akar szórakozni, működik majd azzal is.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 14:53:08
Arra gondoltam, hogy ezt megoldom a programban magában, elméletileg csak pár bájt + (mondjuk 10-30)

Ott is megoldható, bár ennek a verziónak a kimenetében 0 hangerővel már biztosan csak négyszögjel fordul elő. Nem tudom biztosan, hogy ennek van-e gyakorlati hátránya, a file méret ugyan 7967 helyett 7973 byte lett, de ez nem nagy eltérés és file függő lehet.
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 14:58:56
Nem tudom biztosan, hogy ennek van-e gyakorlati hátránya, a file méret ugyan 7967 helyett 7973 byte lett, de ez nem nagy eltérés és file függő lehet.
Szerintem nincs, lehet olyan file, ahol épp csökkenést eredményez.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 15:56:00
4 byte lett :)
Ha 0 a hangereje a 3 jel valamelyikének, akkor 0-ra állítja a pwm regiszert, és ráugrik a négyszögjel feldolgozásra, a hangerő regiszter amúgy is 0 volt.

Még a PWM nullázása is megtakarítható lenne, 0 hangerőnél nem jelentene hallható különbséget, és a konvertáló program eddig is nullára állította ha nem négyszögjel a hullámforma.
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 16:06:10
Még a PWM nullázása is megtakarítható lenne, 0 hangerőnél nem jelentene hallható különbséget, és a konvertáló program eddig is nullára állította ha nem négyszögjel a hullámforma.
Oké, kiveszem :)
Az nem lehet, hogy a SID frekvenica értékét felezni kell? Most felezetten hallgatom, és így nem tűnik túl magasnak, a Cybernoidnál nem tűnt fel, de csináltam egy fájlt ACE II -ből, és annál nagyon feltűnő volt.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.28. 16:25:12
Az nem lehet, hogy a SID frekvenica értékét felezni kell? Most felezetten hallgatom, és így nem tűnik túl magasnak, a Cybernoidnál nem tűnt fel, de csináltam egy fájlt ACE II -ből, és annál nagyon feltűnő volt.

Valóban felezni kell, legalábbis 7812.5 Hz frekvenciánál, 15625-nél negyedelni, egyébként pedig így számítható:

((1000000 / f) * N + 128) / 256

Az 1000000 / f előre kiszámítható 8 bites konstans (a felső bit mindig 0 ha f >= 7812.5).
Title: Re: SID lejátszó
Post by: geco on 2017.January.28. 20:11:34
4MHz-es procival 10KHz-es sebességgel, kevesebb, mint 1 másodperc alatt csomagolja ki a 8K-s blokkot, a processzor sebességével egyenesen arányosan nő a lejátszási sebesség is, de csak a betöltés után van sebességteszt.
Title: Re: SID lejátszó
Post by: gflorez on 2017.January.28. 20:32:31
Wonderful!
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 11:48:05
4MHz-es procival 10KHz-es sebességgel, kevesebb, mint 1 másodperc alatt csomagolja ki a 8K-s blokkot, a processzor sebességével egyenesen arányosan nő a lejátszási sebesség is, de csak a betöltés után van sebességteszt.

Jó lett. :) Még néhány ötlet kisebb optimalizálásokra:
Code: Diff
  1. @@ -179,39 +179,37 @@
  2.  .   0138  F1           POP   AF
  3.  .   0139  FB           EI  
  4.  .   013A  CD B2 04     CALL  04B2
  5.  .   013D  F5           PUSH  AF
  6. -.   013E  3E FF        LD    A, FF
  7. -.   0140  B7           OR    A
  8. +.   013E  76           HALT
  9. +.   013F  E6 FF        AND   FF
  10.  .   0141  20 FB        JR    NZ, 013E
  11.  .   0143  3D           DEC   A
  12. -.   0144  32 3F 01     LD    (013F), A
  13. +.   0144  32 40 01     LD    (0140), A
  14.  .   0147  F1           POP   AF
  15.  .   0148  28 F0        JR    Z, 013A
  16.  .   014A  DD 21 01 63  LD    IX, 6301
  17.  .   014E  3E 80        LD    A, 80
  18.  .   0150  18 E8        JR    013A
  19.  .   0152  66           LD    H, (HL)
  20.  .   0153  6F           LD    L, A
  21. -.   0154  AF           XOR   A
  22. -.   0155  29           ADD   HL, HL
  23. -.   0156  17           RLA
  24. -.   0157  29           ADD   HL, HL
  25. -.   0158  17           RLA
  26. -.   0159  29           ADD   HL, HL
  27. -.   015A  17           RLA
  28. -.   015B  5F           LD    E, A
  29. -.   015C  16 14        LD    D, 14
  30. -.   015E  AF           XOR   A
  31. -.   015F  06 18        LD    B, 18
  32. -.   0161  29           ADD   HL, HL
  33. -.   0162  CB 13        RL    E
  34. -.   0164  17           RLA
  35. -.   0165  BA           CP    D
  36. -.   0166  38 02        JR    C, 016A
  37. -.   0168  92           SUB   D
  38. -.   0169  2C           INC   L
  39. -.   016A  10 F5        DJNZ  0161
  40. +.   0154  5D           LD    E, L
  41. +.   0155  54           LD    D, H
  42. +.   0156  01 00 08     LD    BC, 0800
  43. +.   0159  69           LD    L, C
  44. +.   015A  61           LD    H, C
  45. +.   015B  3E C6        LD    A, C6
  46. +.   015D  29           ADD   HL, HL
  47. +.   015E  17           RLA
  48. +.   015F  30 02        JR    NC, 0163
  49. +.   0161  19           ADD   HL, DE
  50. +.   0162  89           ADC   A, C
  51. +.   0163  10 F8        DJNZ  015D
  52. +.   0165  6C           LD    L, H
  53. +.   0166  67           LD    H, A
  54. +.   0167  23           INC   HL
  55. +.   0168  CB 3C        SRL   H
  56. +.   016A  CB 1D        RR    L
  57.  .   016C  C9           RET
  58.  .   016D  3E 31        LD    A, 31
  59.  .   016F  D3 B4        OUT   (B4), A
  60.  .   0171  FB           EI  
  61. @@ -335,16 +333,16 @@
  62.  .   0235  7C           LD    A, H
  63.  .   0236  32 17 02     LD    (0217), A
  64.  .   0239  EB           EX    DE, HL
  65.  .   023A  AF           XOR   A
  66. -.   023B  32 3F 01     LD    (013F), A
  67. +.   023B  32 40 01     LD    (0140), A
  68.  .   023E  11 AA 02     LD    DE, 02AA
  69.  .   0241  7E           LD    A, (HL)
  70.  .   0242  19           ADD   HL, DE
  71.  .   0243  E5           PUSH  HL
  72.  .   0244  D5           PUSH  DE
  73.  .   0245  CD 52 01     CALL  0152
  74. -.   0248  22 58 02     LD    (0258), HL
  75. +.   0248  22 57 02     LD    (0257), HL
  76.  .   024B  D1           POP   DE
  77.  .   024C  E1           POP   HL
  78.  .   024D  19           ADD   HL, DE
  79.  .   024E  4E           LD    C, (HL)
  80. @@ -352,10 +350,10 @@
  81.  .   0250  46           LD    B, (HL)
  82.  .   0251  E5           PUSH  HL
  83.  .   0252  D5           PUSH  DE
  84.  .   0253  CD E4 03     CALL  03E4
  85. -.   0256  F3           DI  
  86. -.   0257  21 00 00     LD    HL, 0000
  87. +.   0256  21 20 11     LD    HL, 1120
  88. +.   0259  F3           DI  
  89.  .   025A  22 45 00     LD    (0045), HL
  90.  .   025D  38 11        JR    C, 0270
  91.  .   025F  32 6B 03     LD    (036B), A
  92.  .   0262  D6 06        SUB   06
  93. @@ -377,19 +375,19 @@
  94.  .   0286  ED A0        LDI
  95.  .   0288  ED A0        LDI
  96.  .   028A  ED A0        LDI
  97.  .   028C  ED A0        LDI
  98. -.   028E  ED A0        LDI
  99. -.   0290  FB           EI  
  100. +.   028E  FB           EI  
  101. +.   028F  ED A0        LDI
  102.  .   0291  D1           POP   DE
  103.  .   0292  E1           POP   HL
  104.  .   0293  19           ADD   HL, DE
  105.  .   0294  7E           LD    A, (HL)
  106.  .   0295  19           ADD   HL, DE
  107.  .   0296  E5           PUSH  HL
  108.  .   0297  D5           PUSH  DE
  109.  .   0298  CD 52 01     CALL  0152
  110. -.   029B  22 AB 02     LD    (02AB), HL
  111. +.   029B  22 AA 02     LD    (02AA), HL
  112.  .   029E  D1           POP   DE
  113.  .   029F  E1           POP   HL
  114.  .   02A0  19           ADD   HL, DE
  115.  .   02A1  4E           LD    C, (HL)
  116. @@ -397,10 +395,10 @@
  117.  .   02A3  46           LD    B, (HL)
  118.  .   02A4  E5           PUSH  HL
  119.  .   02A5  D5           PUSH  DE
  120.  .   02A6  CD E4 03     CALL  03E4
  121. -.   02A9  F3           DI  
  122. -.   02AA  21 74 04     LD    HL, 0474
  123. +.   02A9  21 20 11     LD    HL, 1120
  124. +.   02AC  F3           DI  
  125.  .   02AD  22 56 00     LD    (0056), HL
  126.  .   02B0  38 11        JR    C, 02C3
  127.  .   02B2  32 6B 03     LD    (036B), A
  128.  .   02B5  D6 06        SUB   06
  129. @@ -422,28 +420,28 @@
  130.  .   02D9  ED A0        LDI
  131.  .   02DB  ED A0        LDI
  132.  .   02DD  ED A0        LDI
  133.  .   02DF  ED A0        LDI
  134. -.   02E1  ED A0        LDI
  135. -.   02E3  FB           EI  
  136. +.   02E1  FB           EI  
  137. +.   02E2  ED A0        LDI
  138.  .   02E4  D1           POP   DE
  139.  .   02E5  E1           POP   HL
  140.  .   02E6  19           ADD   HL, DE
  141.  .   02E7  7E           LD    A, (HL)
  142.  .   02E8  19           ADD   HL, DE
  143.  .   02E9  E5           PUSH  HL
  144.  .   02EA  D5           PUSH  DE
  145.  .   02EB  CD 52 01     CALL  0152
  146. -.   02EE  22 FC 02     LD    (02FC), HL
  147. +.   02EE  22 FB 02     LD    (02FB), HL
  148.  .   02F1  D1           POP   DE
  149.  .   02F2  E1           POP   HL
  150.  .   02F3  19           ADD   HL, DE
  151.  .   02F4  4E           LD    C, (HL)
  152.  .   02F5  19           ADD   HL, DE
  153.  .   02F6  46           LD    B, (HL)
  154.  .   02F7  CD E4 03     CALL  03E4
  155. -.   02FA  F3           DI  
  156. -.   02FB  21 31 02     LD    HL, 0231
  157. +.   02FA  21 9B 01     LD    HL, 019B
  158. +.   02FD  F3           DI  
  159.  .   02FE  22 67 00     LD    (0067), HL
  160.  .   0301  38 11        JR    C, 0314
  161.  .   0303  32 6B 03     LD    (036B), A
  162.  .   0306  D6 06        SUB   06
  163. @@ -465,22 +463,22 @@
  164.  .   032A  ED A0        LDI
  165.  .   032C  ED A0        LDI
  166.  .   032E  ED A0        LDI
  167.  .   0330  ED A0        LDI
  168. -.   0332  ED A0        LDI
  169. -.   0334  FB           EI  
  170. +.   0332  FB           EI  
  171. +.   0333  ED A0        LDI
  172.  .   0335  3E FF        LD    A, FF
  173.  .   0337  01 57 0F     LD    BC, 0F57
  174.  .   033A  D3 B2        OUT   (B2), A

013E-nél a HALT célja a hangminta megszakítás időzítésének a javítása, mivel ez az utasítás csak 4 ciklus futásidejű és a megszakítások többsége itt történne. Ugyanezt a célt szolgálja a 0248-tól kezdődő kódrészletekben a DI és EI utasítások mozgatása, hogy rövidebb ideig legyen tiltott a megszakításkezelés (valójában még rövidebb lehetne, csak ezt tudtam egyszerű bináris szerkesztéssel megoldani). Nem tudom, ezek a módosítások jelentenek-e hallható különbséget, de különösebb hátrányuk sincs. A 0152-es frekvencia konvertáló rutin itt szorzást használ osztás helyett, ami gyorsabb (24 helyett csak 8-szor fut le a ciklus), nagyobb felbontással tudja állítani a sebességet, és az eredményt csonkítás helyett kerekíti. Hátránya azonban, hogy az itt (10 kHz-es lejátszásnál) 198 konstans számítása bonyolultabb, bár az ezt végző kód felülírható lenne a file adattal.

Esetleg lehetne még a DTM lejátszós módszert használni a D/A konverzióra, azaz 62.5 kHz-es négyszögjel helyett fix '1' kimenet a 0. és 3. csatornán (az 1. csatorna az időzítő). Vagy akár a 4*8 bites külső DAC is használható lehetne, de annak talán nem sok értelme lenne, mert jelenleg csak emulátoron működik.

A zajnál érdemes lenne tesztelni azt, ha minden hangerőnél eltérő a zaj minta, ez doboknál például talán jobb hangot eredményezne.
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 19:20:38
Elméletileg minden javasolt változtatás kész, az egyik osztó rutinnal szenvedtem sokat, 62500-zal rosszul osztott,kisebb értékekkel jól, aztán lecseréltem, és azóta gond egy szál se :D , meg a sidplay átalakításával.
A random zaj így jó lesz?
fa:c5fex címen kezdődik, elméletileg a snapshot mentéselőtte történt.
Annyit csináltam, hogy a        ld    hl, 3456h-t lecseréltem a következőre:
Code: [Select]
       call    random
        push    af
        call    random
        pop     hl
        ld      l,a

A random meg az eccerű, és gyors random rutinod :)

Code: [Select]
random  ld      hl,0000h
        ld      a,r
        xor     l
        add     hl,hl
        xor     h
        ld      l,a
        xor     h
        ld      h,a
        ld      (random+1), hl
        ret
Title: Re: SID lejátszó
Post by: endi on 2017.January.29. 19:56:04
ezek a snapshotok megint nem működnek nekem....
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 19:58:22
Szerintem más a verziód, mint az enyém: version 2.0.11 beta
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 20:10:01
A random zaj így jó lesz?
fa:c5fex címen kezdődik, elméletileg a snapshot mentéselőtte történt.
Annyit csináltam, hogy a        ld    hl, 3456h-t lecseréltem a következőre:

A "véletlenszerűbb" zajhoz valójában elég lett volna csak az eredeti rutin végén a JR utasítást módosítani, hogy az LD C, 12h helyett az LD B, C-re ugorjon, azaz ne inicializálja újra a generátort minden táblázatnál. Az 123456h helyett más kezdőérték is lehet, ami eltérő mintát (és talán jobb hangot) eredményez. Az egyszerűbb generátor minden futásnál eltérő kimenetű, mivel az R regiszert használja.

Quote
Code: [Select]
       call    random
        push    af
        call    random
        pop     hl
        ld      l,a

Itt eredetileg elég volt a 8 bites véletlenszám is (csak az L regiszterben), a két random hívás (+CALL/RET) szerintem lassabb a régi kódnál (ami ha jól számolom 110 ciklus a PUSH/POP utasításokkal - amelyek helyett egyébként lehetne EXX ha még nem aktív a hangminta megszakítás, úgy már csak 80 ciklus lenne - együtt, egy "random" pedig 66 ciklus a CALL/RET nélkül). :oops: Azonban az L regiszterben már véletlenszerű érték található a random visszatérésekor.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 20:11:10
ezek a snapshotok megint nem működnek nekem....

Egy ideje már van nem beta 2.0.11 (https://github.com/istvan-v/ep128emu/releases/). :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 20:13:20
Egy ideje már van nem beta 2.0.11 (https://github.com/istvan-v/ep128emu/releases/). :oops:
Le is töltöttem , csak még nem jutottam el odáig, hogy fel is tegyem, de ma fel is teszem.
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 20:15:23
A "véletlenszerűbb" zajhoz valójában elég lett volna csak az eredeti rutin végén a JR utasítást módosítani, hogy az LD C, 12h helyett az LD B, C-re ugorjon, azaz ne inicializálja újra a generátort minden táblázatnál. Az 123456h helyett más kezdőérték is lehet, ami eltérő mintát (és talán jobb hangot) eredményez. Az egyszerűbb generátor minden futásnál eltérő kimenetű, mivel az R regiszert használja.
Ezt nem tudtam, ezért gányoltam bele :) De mindjárt megcsinálom az agrós javítást.
Itt eredetileg elég volt a 8 bites véletlenszám is (csak az L regiszterben), a két random hívás (+CALL/RET) szerintem lassabb a régi kódnál. :oops: Azonban az L regiszterben már véletlenszerű érték található a random visszatérésekor.
Itt nekem nem a gyorsaság volt a szempont, csak az, hogy a táblák változzanak. :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 20:24:14
8 bites DAC 8 MHz-es CPU frekvencián:
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 20:28:14
Itt a teszt verzió, egyelőre még nem foglalkoztam a zene átalakítással, úgyhogy csak az egy teszt alanyom van.

A legutolsó snapshotot frissítettem 2.11-esre :)
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 20:31:15
8 bites DAC 8 MHz-es CPU frekvencián:
Ez sokkal jobban szól, vagy csak a hangereje miatt tűnik úgy?.
Valahogy le lehet kérdezni, hogy van-e DAC csatolva a géphez?
Ha igen, be lehetne tenni auto érzékelősre, ha nem, akkor az elején választhatóra.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 20:37:35
Ez sokkal jobban szól, vagy csak a hangereje miatt tűnik úgy?.

Mivel a zene elsősorban négyszögjelet használ, a 8 bites DAC itt talán nem sok különbséget jelent, viszont a 20 kHz-es lejátszási frekvencia valószínűleg igen. :) És valóban hangosabb a DAVE-es verziónál, de az még használhatná a már említett DTM lejátszós megoldást.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 20:43:07
Valahogy le lehet kérdezni, hogy van-e DAC csatolva a géphez?

Nem tudom, mivel ilyen hardver nem igazán készült egyelőre, vagy csak prototípus lehet valahol. :oops: Zozosoft korábban említett ilyen terveket, de jelenleg a DAC csak az emulátorban létezik, ahol a portjai (F0-F3h) csak írhatók. A 8 bites kimenet kissé bonyolítja a hangerő számítását, négyszögjelnél 3 bittel kell balra léptetni, a táblázat generálásnál pedig módosítani kell a kódot (zajnál a szorzás például nem hagyhatja figyelmen kívül az A felső 2 bitjét).
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 20:47:21
Mivel a zene elsősorban négyszögjelet használ, a 8 bites DAC itt talán nem sok különbséget jelent, viszont a 20 kHz-es lejátszási frekvencia valószínűleg igen. :) És valóban hangosabb a DAVE-es verziónál, de az még használhatná a már említett DTM lejátszós megoldást.
Elméletileg használja, betettem az inicializálást, és áttértem az A8 AF AC regiszterek írására.
Nem tudom, mivel ilyen hardver nem igazán készült egyelőre, vagy csak prototípus lehet valahol. :oops: Zozosoft korábban említett ilyen terveket, de jelenleg a DAC csak az emulátorban létezik, ahol a portjai (F0-F3h) csak írhatók. A 8 bites kimenet kissé bonyolítja a hangerő számítását, négyszögjelnél 3 bittel kell balra léptetni, a táblázat generálásnál pedig módosítani kell a kódot (zajnál a szorzás például nem hagyhatja figyelmen kívül az A felső 2 bitjét).
Ezek szerint a táblákat is módosítottad a feltöltött snapshoban?
Mert arra gondoltam, ha nem is lehet lekérdezni, választhatóvá lehetne tenni a programban menet közben, igaz erre az időre elhallgatna a lejátszás, oda-vissza lehetne váltogatni ha nem kell mindig inicializálni a DTM-es lejátszáshoz a Dave-et.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 20:52:37
Ezek szerint a táblákat is módosítottad a feltöltött snapshoban?

Igen, a korábban feltöltött Lua script módosított változatával. A Z80-as kódon legalább 3 helyen kellene változtatni (négyszögjel hangerő, háromszög/fűrész hangerő, zaj hangerő számítása), és talán még a kivezérlésjelzőn is ha az 6 bites értékeket tételez fel.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 21:04:16
Itt a teszt verzió, egyelőre még nem foglalkoztam a zene átalakítással, úgyhogy csak az egy teszt alanyom van.

Kipróbáltam -maxoffs 16384 paraméterrel újracsomagolva (9788 helyett 8728 byte lett), így is működik, és a régebbi Cybernoid II konverzióval is. :)
Title: Re: SID lejátszó
Post by: endi on 2017.January.29. 21:09:15
jó lenne ha ez a lejátszó kiejelzni hogy mennyi cpu időt visz el
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 21:24:52
Kipróbáltam -maxoffs 16384 paraméterrel újracsomagolva (9788 helyett 8728 byte lett), így is működik, és a régebbi Cybernoid II konverzióval is. :)
Szuper :) Amikor még próbálgattam a külömböző értékeket, akkor bugos volt a lejátszó, és töröltem az összeset :oops:
Igen, a korábban feltöltött Lua script módosított változatával. A Z80-as kódon legalább 3 helyen kellene változtatni (négyszögjel hangerő, háromszög/fűrész hangerő, zaj hangerő számítása), és talán még a kivezérlésjelzőn is ha az 6 bites értékeket tételez fel.
Akkor csak az elején választhatóra lehetne megcsinálni, vagy közben is, de akkor hosszabb a várakozás.
Szerintem megpróbálkozom az elején választhatóra.
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 21:27:49
jó lenne ha ez a lejátszó kiejelzni hogy mennyi cpu időt visz el
Alapból 100%-ot várakozással együtt :D
Úgy kb 80%-ot ha már ki van csomagolva minden, és 100%-ot csomagolás közben 4MHz-en.
Title: Re: SID lejátszó
Post by: endi on 2017.January.29. 21:37:03
Alapból 100%-ot várakozással együtt :D
Úgy kb 80%-ot ha már ki van csomagolva minden, és 100%-ot csomagolás közben 4MHz-en.

akkor egy mod player jobb, asszem az kevesebbet visz :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 21:41:19
Elméletileg minden javasolt változtatás kész, az egyik osztó rutinnal szenvedtem sokat, 62500-zal rosszul osztott,kisebb értékekkel jól, aztán lecseréltem, és azóta gond egy szál se :D , meg a sidplay átalakításával.

4 MHz-en jónak tűnik a frekvencia (C5h / 256 a szorzó, és PAL C64 órajelet feltételezve a pontos érték 197.05 lenne), azonban 8 MHz-en néhány százalékkal eltér (95 lesz 98.52 = kerekítve 99 helyett). De ez lehet, hogy csak a mérés pontatlansága.
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 21:56:01
4 MHz-en jónak tűnik a frekvencia (C5h / 256 a szorzó, és PAL C64 órajelet feltételezve a pontos érték 197.05 lenne), azonban 8 MHz-en néhány százalékkal eltér (95 lesz 98.52 = kerekítve 99 helyett). De ez lehet, hogy csak a mérés pontatlansága.
Elméletileg pontosan kéne számolnia, előbb kiszámolok egy DAVE megszakítás osztót(ez pontatlan, mert a 7812 Hz osztóját a 20h*4-et osztom a processzor sebességével. de ez nem számít), ezzel elosztom a 250 KHz-et, majd ennek az értékével osztom a 256*2*3848,5-ot, majd az eredményt 2-vel, ha van carry, akkor felfelé kerekítek, és a végén betöltöm az A2-A3-ba a kapott DAVE megszakítási osztó - 1 -et.
Title: Re: SID lejátszó
Post by: geco on 2017.January.29. 22:06:24
Lehet a SID max hangerejét számoltam pontatlanul, a neten talált 985248 Hz PAL CPU sebességgel számoltam: 3848,566274642947 = 65535 * 985248 Hz /16777216
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.29. 22:18:44
Lehet a SID max hangerejét számoltam pontatlanul, a neten talált 985248 Hz PAL CPU sebességgel számoltam: 3848,566274642947 = 65535 * 985248 Hz /16777216

Az szerintem jó, és 4 MHz-en pontos is a C5h, csak 8 MHz-en valamiért nem a fele lett, hanem 5Fh.
Title: Re: SID lejátszó
Post by: geco on 2017.January.30. 08:51:13
Az szerintem jó, és 4 MHz-en pontos is a C5h, csak 8 MHz-en valamiért nem a fele lett, hanem 5Fh.
Lehet azért, mert nem pont duplája a frekvencia.
Megnéztem, azért :) 4MHz-en 18h+1 az osztó, és 10000Hz, 8MHz-en 0bh+1 az osztó 20833 Hz-es a lejátszás, és ahogy számoltam ehhez jó a 95.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.January.30. 09:10:36
6, 7.12, 10MHz-re is számoltok? :oops: Ezt majd betöltéskor automatikusan beállítja a progi?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.30. 10:13:50
Megnéztem, azért :) 4MHz-en 18h+1 az osztó, és 10000Hz, 8MHz-en 0bh+1 az osztó 20833 Hz-es a lejátszás, és ahogy számoltam ehhez jó a 95.

Nekem 18h a DAVE frekvencia 8 MHz-en is (500000 / (24 + 1) = 20000). Talán azért, mert a DAVE órajelet is növeltem, de ez valódi gépen is így van, azaz a fix DAVE frekvencia kód a Z80/DAVE órajellel egyenes arányban növekvő frekvenciát eredményez. Lehet, hogy a számítás nem veszi figyelembe hogy nem 20833 Hz-es a lejátszás?

Az emulátor azonban jelenleg csak 1000000 maximális értéket engedélyez a hang órajelnél, tehát csak 8 MHz-ig lehet pontos az emuláció, utána már csak a Z80 gyorsulhat. :oops: A következő verzióban talán növelhetném 1250000-re (ami 10 MHz-ig elég), a lejátszó tesztelése közben bug gyanús jelenséget is észrevettem, így lehetne egy 2.0.11.2 kiadás az esetleges javítással. Egyébként elég lenne egy fix DAVE frekvencia értéket beállítani, és azt mérni, ebből hány ciklus van két video megszakítás között.
Title: Re: SID lejátszó
Post by: geco on 2017.January.30. 10:18:51
Húú, igen, a beállítás jó, ha emulátor (nem változik a Dave freki) , akkor változik a Dave osztó, ha nem emulátor (változik a dave freki is), akkor marad a 18h, viszont ehhez nem jó az osztó, lehet átalakítom, hogy ha nem emulátorról van szó, akkor annak megfelelően számoljon.
Title: Re: SID lejátszó
Post by: geco on 2017.January.30. 10:20:02
6, 7.12, 10MHz-re is számoltok? :oops: Ezt majd betöltéskor automatikusan beállítja a progi?
Kerek MHz-nként számol, és betöltéskor belövi az osztóz, mint kiderült, van kis átalalkítanivaló.
Akár lehetne 5 MHz-es is a gép.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.30. 11:22:55
Talán elég lenne a fix DAVE frekvencia beállítás is, valódi turbós gépen a DAVE mindig a Z80-al egyenes arányban gyorsul, a csak emulátoron létező konfigurációkat külön támogatni kevésbé fontos (azok is működnének, csak nem gyorsulna a lejátszás, ami nem is feltétlenül hátrány, mert például 100 MHz-es Z80-nál elvileg 250 kHz-et lehetne beállítani, de akkor már meglehetősen pontatlan lenne a frekvencia, a zajnál már csak 6 bit maradna). Ez a rutin mindenesetre a ténylegesen beállított lejátszási frekvenciából (itt 18h) számítja a szorzót:
[attachurl=1]

Code: ZiLOG Z80 Assembler
  1. ; NICK video interrupt frequency = 17734475 / 4 / 284 / 312
  2. ; PAL C64 clock frequency = 17734475 / 18
  3. ; fSR = playback sample rate
  4. ; N = fSR / video interrupt frequency (measured)
  5. ; fSR = N * 17734475 / 4 / 284 / 312
  6. ; SID frequency multiplier
  7. ;       = fPAL * 2 / fSR
  8. ;       = (17734475 / 18) * 2 / (N * 17734475 / 4 / 284 / 312)
  9. ;       =         (1 / 9)     / (N / 4 / 284 / 312)
  10. ;       =       4 * 284 * 312 / (9 * N)
  11. ;       =       39381.3333... / N
  12. ;       =              118144 / (3 * N)
  13.  
  14. getSIDPlaybackFreq:
  15.         di
  16.         ld    a, 0ch
  17.         out   (0bfh), a
  18.         ld    a, 18h
  19.         out   (0a2h), a
  20.         xor   a
  21.         out   (0a3h), a
  22.         ld    c, a
  23.         ld    b, a
  24.         ld    a, 65h
  25.         out   (0a7h), a
  26.         call  .l4
  27.         ld    l, b
  28.         ld    h, b
  29.         ld    b, 3
  30. .l1:    call  .l4                       ; HL = 3 * N
  31.         djnz  .l1
  32.         ld    e, l
  33.         ld    d, h
  34.         ld    a, l
  35.         ld    l, h
  36.         ld    h, b                      ; B = 0
  37.         ld    bc, 118144 >> 8           ; B = 01h
  38.         srl   l
  39.         rra
  40.         adc   a, 118144 & 0ffh
  41.         adc   hl, bc
  42. .l2:    add   a, a
  43.         adc   hl, hl
  44.         sbc   hl, de
  45.         jr    nc, .l3
  46.         add   hl, de
  47. .l3:    ccf
  48.         rl    b
  49.         jr    nc, .l2
  50.         ld    a, b
  51.         ret
  52. .l4:    in    a, (0b4h)
  53.         and   11h
  54.         or    c
  55.         rlca
  56.         and   66h
  57.         ld    c, a                      ; -ON--ON-
  58.         rlca                            ; ON--ON--
  59.         xor   c                         ; OXN-OXN-
  60.         bit   2, a
  61.         jr    z, .l5
  62.         inc   hl                        ; sound interrupt
  63. .l5:    cp    0c0h
  64.         jr    c, .l4                    ; not 50 Hz interrupt ?
  65.         ret
Title: Re: SID lejátszó
Post by: geco on 2017.January.30. 11:35:05
Talán elég lenne a fix DAVE frekvencia beállítás is, valódi turbós gépen a DAVE mindig a Z80-al egyenes arányban gyorsul. Ez a rutin mindenesetre a ténylegesen beállított lejátszási frekvenciából (itt 18h) számítja a szorzót:
(Attachment Link)
Lehetne még előtte külön Z80 teszt is (utasítások száma két 1 kHz-es megszakítás között) ami felismeri az emulált konfigurációt is, annak a pontossága kevésbé fontos, a lényeg, hogy ne állítson be olyan frekvenciát amihez nem elég gyors a CPU. :)
Most így működik nagyjából, csak annyi a különbség, hogy Dave 50 Hz alatt számolja a Z80 utasításokat, ez alapján dől el később, hogy emulátor alatt indult a program, vagy nem.
A valódi gépes beállítás nem volt korrekt, de javítom, hogy mindig a megfelelő konfig alapján számoljon (emulátor, vagy valódi gép (esetleg emulátor + helyesen állított Dave)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.30. 12:00:59
6, 7.12, 10MHz-re is számoltok? :oops: Ezt majd betöltéskor automatikusan beállítja a progi?

A fenti (sidfreq.s-ben található) rutin a tényleges lejátszási frekvenciát méri és annak megfelelően számítja a konverzióhoz a szorzót, tehát csak ezzel is mindig jó lenne a hangmagasság, valódi gépen pedig elég egy fix DAVE frekvencia értéket (18h, ami 4 MHz-es gépen 10 kHz-nek felel meg) beállítani:

4 MHz: 197 (197.05)
6 MHz: 131 (131.37)
7.12 MHz: 111 (110.72)
8 MHz: 99, néha 98 (98.52)
10 MHz: 79 (2.0.11.2 Git verzió) (78.82)

Ahhoz, hogy az emulátor specifikus konfigurációk ahol csak a Z80 gyorsabb is kihasználják a nagyobb frekvencia lehetőségét, a Z80-at még külön mérni kell és 18h helyett alacsonyabb értéket beállítani.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.30. 13:20:57
A következő verzióban talán növelhetném 1250000-re (ami 10 MHz-ig elég), a lejátszó tesztelése közben bug gyanús jelenséget is észrevettem, így lehetne egy 2.0.11.2 kiadás az esetleges javítással.

A Git forráskódban már növeltem is, és az egyik hibát javítottam (a NICK portok írása a debuggerben video várakozást eredményezett, azaz lassította a Z80 kódot - ezért fagyasztotta le a lejátszót egy Lua script ami a keret színezésével jelenítette meg a CPU fogyasztást).
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.30. 18:40:23
Itt a teszt verzió, egyelőre még nem foglalkoztam a zene átalakítással, úgyhogy csak az egy teszt alanyom van.

Ezzel a verzióval nekem a fűrészjelből (20h hullámforma) háromszög lesz. :oops: De ezt a konvertáló programban is lehetne javítani.
Title: Re: SID lejátszó
Post by: geco on 2017.January.30. 23:08:08
Ezzel a verzióval nekem a fűrészjelből (20h hullámforma) háromszög lesz. :oops: De ezt a konvertáló programban is lehetne javítani.
Áááá, én szúrtam el, a táblák sorrendjét a kiválasztásnál jól lőttem be, de feltöltésnél felcseréltem a fűrészjelet a háromszöggel, elméletileg javítva, és az osztó számítás is valódi gépen, pár kisebb módosítás mellett betettem az ext DAC lejátszást is, 1-es gomb DAVE, 2-es ext DAC, menet közben váltható, annyi, hogy ilyenkor a váltás idejére elhallgat a zene.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.31. 00:02:02
az osztó számítás is valódi gépen

Most BFh lett 4 MHz-es konfiguráción, de még nem néztem, hogy van-e valahol hiba.
Title: Re: SID lejátszó
Post by: geco on 2017.January.31. 08:58:31
Most BFh lett 4 MHz-es konfiguráción, de még nem néztem, hogy van-e valahol hiba.
Nekem 0c5h-t dobál.

  
  0155  54                LD    D, H
  0156  3E C5          LD    A, C5
  0158  01 00 08     LD    BC, 0800
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.31. 09:49:32
Most már nekem is C5, nem tudom, a másik gépen miért lett BF. :oops:
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.January.31. 09:51:10
A 191-es port be van állítva a méregetés előtt?
Title: Re: SID lejátszó
Post by: geco on 2017.January.31. 10:30:20
A 191-es port be van állítva a méregetés előtt?
Elméletileg be, azzal kezdtem az ellenőrzést, hogy BF port hányszor van írva, egyszer, igaz a program elején.
Ugye egyik EXOS kiegészítő se írja már program indítása után?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.31. 13:17:12
Az lehet a probléma, hogy ZozoTools-os konfigurációval teszteltem, amivel eltérő az LPT. A teljes hossza itt is 312 sor, de a VINT-es LPB hosszúságára érzékeny a kód, mert a VINT lefutó és felfutó éle közötti időt (ami kevesebb 312 sornál) méri. Az itt (https://enterpriseforever.com/sound/sid-lejatszo/msg61942/#msg61942) található rutin (ami pontos eredményt ad) az ilyen hibák elkerülése céljából csak a lefutó éleket figyeli.

Szerk.: az eredeti EXOS LPT-ben 14 soros a VINT, ZozoTools 1.9-el csak 6 soros.

Talán nincs nagy jelentősége, de FILE: eszköznél esetleg az A6h (érvénytelen file név) hibát kezelni lehetne, az IVIEW-ben már javítottam, hogy ne kérjen végtelen ciklusban file nevet, ha a felhasználó Cancel gombbal megpróbál kilépni. :) Illetve még a bemeneti file érvényességét is ellenőrizni lehetne, hogy nem megfelelő formátumú file esetén ne fagyjon le, de ez nem biztos, hogy megérné a bonyolultabb/lassabb betöltés miatt.
Title: Re: SID lejátszó
Post by: geco on 2017.January.31. 13:37:07
Az lehet a probléma, hogy ZozoTools-os konfigurációval teszteltem, amivel eltérő az LPT. A teljes hossza itt is 312 sor, de a VINT-es LPB hosszúságára érzékeny a kód, mert a VINT lefutó és felfutó éle közötti időt (ami kevesebb 312 sornál) méri. Az itt (https://enterpriseforever.com/sound/sid-lejatszo/msg61942/#msg61942) található rutin (ami pontos eredményt ad) az ilyen hibák elkerülése céljából csak a lefutó éleket figyeli.

Szerk.: az eredeti EXOS LPT-ben 14 soros a VINT, ZozoTools 1.9-el csak 6 soros.
Tuti az lesz, arra nem gondoltam anno, hogy lehet más VINT-es LPB méret is :oops: , oké, megnzem majd a fent található rutint
Talán nincs nagy jelentősége, de FILE: eszköznél esetleg az A6h (érvénytelen file név) hibát kezelni lehetne, az IVIEW-ben már javítottam, hogy ne kérjen végtelen ciklusban file nevet, ha a felhasználó Cancel gombbal megpróbál kilépni. :) Illetve még a bemeneti file érvényességét is ellenőrizni lehetne, hogy nem megfelelő formátumú file esetén ne fagyjon le, de ez nem biztos, hogy megérné a bonyolultabb/lassabb betöltés miatt.
Jó ötlet az A6h figyelése, én a nem megfelelő formátumú fájl figyelését kihagynám, ha valaki rossz fájlokat töltöget, az megérdemli :D , hacsak nem az egyszerű ellenőrzést, ha jól tudom az első két byte itt is a fájl hossza-2 , ezt lehetne összevetni a betöltött bájtokkal, amúgy Disk configon kiterjesztés ellenőrzés van, tudom ez meg se közelíti a bemeneti fájl ellenőrzést.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.January.31. 13:43:09
A fájlnak esetleg kitalálni egy rendes EXOS fejléct?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.31. 13:59:40
hacsak nem az egyszerű ellenőrzést, ha jól tudom az első két byte itt is a fájl hossza-2

Ez csak az -m3 formátumnál van így. -m0-nál még viszonylag egyszerűen olvasható lenne az első blokk mérete (aminek mindig 8192-nek kellene lennie), de az itt használt -m2 formátumnál csak bonyolultabb módon lehetne felismerni ha nem megfelelő a file. A 8 bites ellenőrző összeg könnyen tesztelhető, így általában felismerhető a nem -m2 file, de ez még nem teljesen megbízható, és lassítja is a betöltést (bár ezen a kódon még lehetne optimalizálni):

Code: ZiLOG Z80 Assembler
  1. l "sid_data.m64" 0 1000
  2. Loaded file to 1000-363B
  3.  
  4. A   0F00  F3           DI  
  5. A   0F01  31 00 0F     LD    SP, 0F00
  6. A   0F04  21 00 10     LD    HL, 1000
  7. A   0F07  01 3C 26     LD    BC, 263C
  8. A   0F0A  16 54        LD    D, 54
  9. A   0F0C  3E 80        LD    A, 80
  10. A   0F0E  82           ADD   A, D
  11. A   0F0F  0F           RRCA
  12. A   0F10  AE           XOR   (HL)
  13. A   0F11  ED A1        CPI
  14. A   0F13  EA 0E 0F     JP    PE, 0F0E
  15. A   0F16  18 FE        JR    0F16
  16. A   0F18
  17.  
  18. g f00

Hiba esetén az A értéke nem FF lesz.
Néhány egyéb tesztelhető tulajdonság:
- a file mérete legalább 18 byte
- a második byte kisebb mint 32
- a második és a harmadik byte nem lehet egyszerre 0

Quote
amúgy Disk configon kiterjesztés ellenőrzés van, tudom ez meg se közelíti a bemeneti fájl ellenőrzést.

Az is jó lehet, talán nem túl gyakran van teljesen más formátumú file-nak pont ilyen kiterjesztése. :) A legvalószínűbb hiba talán az, ha valaki véletlenül eltérő formátumú SID zenét (pl. eredeti C64-es PSID/RSID, régi SIDBASIC formátum, stb.) próbál meg betölteni.

A fájlnak esetleg kitalálni egy rendes EXOS fejléct?

Az lenne az ideális megoldás, csak akkor kevésbé egyszerű a konvertálás. Vagy esetleg a libepcompress-t használni a sid_conv.cpp-ben, és akkor a kimenete már megfelelő paraméterekkel tömörített és fejléces file lehet.
Title: Re: SID lejátszó
Post by: geco on 2017.January.31. 14:57:17
A fájlnak esetleg kitalálni egy rendes EXOS fejléct?
úgy gondoltad, mint az 5-ös fejléc esetén, csak egy új, nem használt kódot rendelni hozzá, mondjuk 62h, és betenni a file hosszát, meg esetleg még valami azonosítót?
Title: Re: SID lejátszó
Post by: geco on 2017.January.31. 14:59:38
A 8 bites ellenőrző összeg könnyen tesztelhető, így általában felismerhető a nem -m2 file, de ez még nem teljesen megbízható, és lassítja is a betöltést (bár ezen a kódon még lehetne optimalizálni):
Nekem ez sem tűnik túl időrablónak :)

Hiba esetén az A értéke nem FF lesz.
Néhány egyéb tesztelhető tulajdonság:
- a file mérete legalább 16 byte
- a második byte kisebb mint 32
- a második és a harmadik byte nem lehet egyszerre 0
Ezeket meg simán be lehet tenni, hely van még bőven a FILE-t tartalmazó szegmensen :)
Title: Re: SID lejátszó
Post by: geco on 2017.January.31. 16:08:56
oké, nem ígérem, hogy ma, holnap ránézek, de a csütörtökön biztos.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.January.31. 18:46:04
Nekem ez sem tűnik túl időrablónak :)
Ezeket meg simán be lehet tenni, hely van még bőven a FILE-t tartalmazó szegmensen :)

Ez a rutin ellenőrzi a fentieket, és hiba esetén az .l4-re ugrik:

Code: ZiLOG Z80 Assembler
  1. INPUT_BUFFER    equ     1000h
  2.  
  3.         ld    hl, 10100h - INPUT_BUFFER
  4.         add   hl, de
  5.         push  de
  6.         ld    b, l
  7.         ld    c, h                      ; CB = file size + 256
  8.         ld    de, 10000h - (18 + 256)
  9.         add   hl, de
  10.         pop   hl
  11.         jr    nc, .l4
  12.         sbc   a, a
  13.         inc   b
  14.         ld    d, 0ach
  15.         jr    .l3
  16. .l1:    dec   h
  17. .l2:    dec   l
  18.         xor   (hl)
  19.         rlca
  20.         add   a, d
  21. .l3:    djnz  .l2
  22.         dec   c
  23.         jr    nz, .l1
  24.         xor   80h
  25.         jr    nz, .l4
  26.         inc   hl
  27.         ld    a, (hl)
  28.         cp    high 2000h
  29.         jr    nc, .l4
  30.         inc   hl
  31.         or    (hl)
  32.         ret   nz
  33. .l4:    jp    .l4

A DE regiszterben az utolsó betöltött byte utáni cím található (azaz amivel az EXOS 6 visszatér, esetleg ott is tesztelhető hogy a file nem nagyobb-e a puffer méreténél, bár a csonkított file valószínűleg ellenőrző összeg hibát is eredményez), az INPUT_BUFFER pedig a puffer kezdőcíme, 256 byte-os határra igazítva.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.02. 21:19:09
Továbbfejlesztett sid.s (a sidrec.lua kimenetét játssza le SID kártyával):
[attachurl=1]
[attachurl=2]
[attachurl=3]
[attachurl=4]

A bemeneti file "-raw -m0 -9 -blocksize 16384 -maxoffs 32768" tömörítésű, az érvényességét ellenőrzi, és beépített FILE használható a választására.
Title: Re: SID lejátszó
Post by: gflorez on 2017.February.02. 22:25:53
Szuper ügyes egér rutin! Fogok tedd a EnterMice wiki most.

Jelent ez szolgálnak 4-10MHz Z80 tartományban?

---------------------

Super neat mouse routine! I am going to put it on the EnterMice wiki just now.

Does it serve for the 4-10Mhz Z80 range?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.03. 08:42:50
Does it serve for the 4-10Mhz Z80 range?

It is the same routine that is used in FILE 1.4 and IVIEW. In theory, it does work at 10 MHz, but I could not test that on a real machine.
Title: Re: SID lejátszó
Post by: gflorez on 2017.February.03. 10:27:09
Now I can... This weekend I will test it.

Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.03. 11:21:28
Néhány kisebb módosítás:
- a decompress_m0_16K.s-ben javítottam egy hibát
- érvénytelen formátumú bemeneti file esetén nem lép ki, hanem másikat lehet választani
- a lejátszás Enter billentyűvel is megszakítható, ilyenkor újabb file választására van lehetőség; a Stop és Esc továbbra is kilép
Title: Re: SID lejátszó
Post by: geco on 2017.February.03. 23:19:32
Itt az újabb tesztelnivaló, pár konvertált SID-del ellátva.
Mit szúrok el a SIDREC.LUA-val való mentéskor?
Ha jól látom, akkor mentené a csonka végblokkokat is, nem csak a full 16K-sokat, de nekem eddig mindig eldobta a végblokkokat.
Elindítom a LUA-t, majd mikor befejezném, nyomok egy F10-et, stoppolom a LUA-t, gondolom pont ezért nem menti ki, mert nem hagyom végigfutni, hogyan tudom szabályosan leállítani?
Title: Re: SID lejátszó
Post by: geco on 2017.February.03. 23:33:47
Közben lehet rájöttem, ha nyomok egy jópofa resetet, mihelyt eléri a 0000-ás címet, akkor menti ki a töredék bájtokat. :lol:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.04. 10:26:42
Közben lehet rájöttem, ha nyomok egy jópofa resetet, mihelyt eléri a 0000-ás címet, akkor menti ki a töredék bájtokat. :lol:

Valóban, a felvételt a reset állítja le, hasonló megoldást más scriptekben is használtam. :oops: A legjobb az lenne, ha meg lehetne állapítani, mikor ér véget a zene, és azt figyelni (nem tudom, a PSID/RSID formátum erre ad-e lehetőséget). Talán a port írásnál is meg lehetne oldani, hogy DAVE módban is működjön a felvétel.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 12:03:43
Valóban, a felvételt a reset állítja le, hasonló megoldást más scriptekben is használtam. :oops: A legjobb az lenne, ha meg lehetne állapítani, mikor ér véget a zene, és azt figyelni (nem tudom, a PSID/RSID formátum erre ad-e lehetőséget). Talán a port írásnál is meg lehetne oldani, hogy DAVE módban is működjön a felvétel.
Elméletileg meg, mert a D400-D41Fh tartalmazza a SID regisztereket, most épp azon küzdök ,hogy ha SID módba kerül a lejátszás, akkor mentsen. ha Dave-be, akkor fejezze be, egyelőre nem sok sikerrel.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.04. 12:33:56
A legjobb az lenne, ha meg lehetne állapítani, mikor ér véget a zene, és azt figyelni (nem tudom, a PSID/RSID formátum erre ad-e lehetőséget).
Hogy mit tud, és mit nem a fájl formátum én sem tudom, de a HVSC-nek része egy Songlenghts.txt fájl. Ebből ki lehet olvasni, bár másodpercnél nincs benne pontosabb adat. Gondolom egy kicsit tovább játszva és a felvett adatokban ismétlődést keresve pontosan belőhető a tényleges hossz.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 12:35:03
Elméletileg meg, mert a D400-D41Fh tartalmazza a SID regisztereket, most épp azon küzdök ,hogy ha SID módba kerül a lejátszás, akkor mentsen. ha Dave-be, akkor fejezze be, egyelőre nem sok sikerrel.
Már kezd működni, csak a SID regiszter 0-ázása kavar be, ezért ha hosszan nyomom az F1-et, akkor leallokál több üres file-t.
Elméletileg úgy működne, hogy akkor allokálja le a fájlt, ha 0eh írás volt, és lezárja, ha 0a0h írás volt, vagy reset, 0a0h írást követő 0eh írásnál új fájlt hoz létre.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 12:46:05
A legjobb az lenne, ha meg lehetne állapítani, mikor ér véget a zene, és azt figyelni (nem tudom, a PSID/RSID formátum erre ad-e lehetőséget).
Ahogy nézem  a SID file headert, sajnos nem látok semmi e célra használhatót. :(
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.04. 12:47:20
Azt nem lehet figyelni, hogy újra az első címtől kezdi játszani? Vagy nincs ilyen?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.04. 12:50:46
Ahogy nézem  a SID file headert, sajnos nem látok semmi e célra használhatót. :(

Valóban, bár tulajdonképpen nem meglepő, egyébként nem kellene külön .txt file ilyen célra. :)

Azt nem lehet figyelni, hogy újra az első címtől kezdi játszani? Vagy nincs ilyen?

A file tartalmazza a 6502 lejátszó kódot is, ami mindegyiknél más lehet, és így a kezdőcím is változhat.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 12:56:27
Hogy mit tud, és mit nem a fájl formátum én sem tudom, de a HVSC-nek része egy Songlenghts.txt fájl. Ebből ki lehet olvasni, bár másodpercnél nincs benne pontosabb adat. Gondolom egy kicsit tovább játszva és a felvett adatokban ismétlődést keresve pontosan belőhető a tényleges hossz.
Ez jó ötlet, le lehetne állítani a mentést egy beállított fix idő után, ami a txt file alapján lenne belőve.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 13:10:08
Lehet az lenne az ideális megoldás, ha a sidplay SID lejátszó kezdőcímére teszünk egy megszakítást, innentől kezdve ment, a megadott ideig?
Így lehetne god módban menteni (alt+w) :ds_icon_cheesygrin:
Az ACE II-n leteszteltem, úgy tűnik, hogy az idő felfelé van kerekítve, pl D37Ch-n kezdődik a play_tune rutin, ezt minden SID tune csak egyszer hívja meg.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 13:58:04
Ez így működőképes lesz? Teszt alapján 1 percig nem tudtam csinálni semmit az emuban :)
Code: [Select]
acttime = os.time()
minv = 1
secv = 0
endtime = os.time() +minv*60 + secv

while os.time()~=endtime do
end
Title: Re: SID lejátszó
Post by: endi on 2017.February.04. 14:29:46
néha berakhatnátok olyan snapshotot amiben van sok sid is, mert én amiket beraktok nem tudom működésre bírni, disk image-khez nem értek és nem is akarok :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.04. 14:38:38
Ez így működőképes lesz? Teszt alapján 1 percig nem tudtam csinálni semmit az emuban :)

Szerintem célszerűbb lenne az 50 Hz-es (azaz pontosan 50.0363257 Hz-es EP-n és 50.1245732 Hz-es PAL C64-en) megszakításokat számolni egy változóban, a valós idő mérése érzékeny az emuláció sebességére.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.04. 15:00:04
disk image-khez nem értek és nem is akarok :)
Höööööööööö???? Kell ahhoz egyáltalán érteni? A ep128emu telepítésekor meg lehet adni, hogy alapértelmezetten ezzel legyenek megnyitva az ilyen fájlok. De ha akkor nem állítottad be, a jobb gombos menüben a társítással egyedileg is megadhatod az egyes fájlokra. Már ha Windows az operációs rendszered.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 16:05:10
Szerintem célszerűbb lenne az 50 Hz-es (azaz pontosan 50.0363257 Hz-es EP-n és 50.1245732 Hz-es PAL C64-en) megszakításokat számolni egy változóban, a valós idő mérése érzékeny az emuláció sebességére.
Oké, első tippem ez volt nekem is, azt gondoltam, hogy a time változó lesz a jobb választás, akkor ez alapján indulok el.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 16:06:07
néha berakhatnátok olyan snapshotot amiben van sok sid is, mert én amiket beraktok nem tudom működésre bírni, disk image-khez nem értek és nem is akarok :)
Én se használok disk image-ket, a working folderbe pakolok mindent, és FileIO-s konfiggal mindent pik-pak be lehet tölteni.
Title: Re: SID lejátszó
Post by: endi on 2017.February.04. 16:16:05
Én se használok disk image-ket, a working folderbe pakolok mindent, és FileIO-s konfiggal mindent pik-pak be lehet tölteni.

én is.
de itt ez hogy műxik? nekem amiket ide beraktatok azok a: drive-t listázzák
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.04. 16:20:36
de itt ez hogy műxik? nekem amiket ide beraktatok azok a: drive-t listázzák

Az valószínűleg lemezes konfiguráció, helyette például az "ep128uk\EP_128k_Tape_FileIO.cfg"-t betöltve (Alt+Q) már használható a FILE: eszköz.
Title: Re: SID lejátszó
Post by: endi on 2017.February.04. 16:25:26
Az valószínűleg lemezes konfiguráció, helyette például az "ep128uk\EP_128k_Tape_FileIO.cfg"-t betöltve (Alt+Q) már használható a FILE: eszköz.

be van nekem állítva a fileio, írtam is hogy én csak azt használom mindenre
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 16:31:38
be van nekem állítva a fileio, írtam is hogy én csak azt használom mindenre
Igen, de van EXDOS is a konfigban, válassz egy EXDOS mentes FileIO-s konfigot, ahogy István is ajánlotta
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 18:04:54
Segítséget szeretnék kérni, majdnem kész 2 verzió is, az egyik a regiszter írásokat gyűjti (sidrecnreg), így csak akkor ment adatot, ha SID-en megy a lejátszás, a 2. a d400-d418h memóriatartományt menti, így a felvétel működik bármilyen lejátszás mellett, egy bajom van, ha végzett a fájl kimentésével, és újat mentenék ki, a következő fájlt leallokálja, de nem ír bele semmit, mit szúrtam el? Lehet valójában nincs értelme ennek a megoldásnak, mert úgyis minden egyes felvételhez be kell állítani az időt, és újrafuttatni a scriptet, de azért érdekel :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.04. 18:18:10
Talán az acttime nullázása hiányzik? Ha már elérte a lejátszási idő végét, akkor a következő file elején már azonnal acttime >= playtime lesz, így befejeződik a felvétel.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 18:25:20
Talán az acttime nullázása hiányzik? Ha már elérte a lejátszási idő végét, akkor a következő file elején már azonnal acttime >= playtime lesz, így befejeződik a felvétel.
igen, igen, és igen :lol: Köszi.
Az mprint hogy működik, mert tesztként betettem, de nem láttam sehol az üzenetet.
mprint ("save time elapsed")
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.04. 18:36:55
Az mprint hogy működik, mert tesztként betettem, de nem láttam sehol az üzenetet.
mprint ("save time elapsed")

Elvileg a monitor ablakba írja az üzenetet.
Title: Re: SID lejátszó
Post by: geco on 2017.February.04. 19:38:50
Elvileg a monitor ablakba írja az üzenetet.
Írja is, csak én nem vettem észre eddig :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 00:01:20
Valami nem stimmel, szerintem az envelope emulációban lehet a gebasz, leginkább a Last Ninja 2-nél jön elő, először arra gondoltam, hogy a LUA-ban rontottam el valamit, de annak a többi SID-re is hatással kéne lennie, elég sok jónak tűnik.
Megnéztem, a módosított sidplayerrel (sid_conv.cpp-nek megfelelő formátumban ment) mentett adattal az LN_II1 nem halkul el, viszont az envelope emulációmon lenne mit csiszolni, a sid_conv.cpp-vel jó sid-ek szebben szólnak.

Attachmentek leszedve.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 09:11:29
Valami nem stimmel, szerintem az envelope emulációban lehet a gebasz, leginkább a Last Ninja 2-nél jön elő, először arra gondoltam, hogy a LUA-ban rontottam el valamit, de annak a többi SID-re is hatással kéne lennie, elég sok jónak tűnik.

Az eredeti Last Ninja 2 SID file hol található? :oops: Lehet a Lua script hibája is, a file formátum nem teszi lehetővé annak a tárolását, ha egy SID regiszter egy 50 Hz-es megszakítás időtartamán belül egynél többször változik. Ez problémát okozhat például a trigger bitnél: ha a lejátszó egy új hang indítását úgy oldja meg, hogy csak rövid időre 0-ra állítja, majd azonnal 1-re, akkor ez az esemény elveszhet:

-----------------+ +---------------------   1
                 | |
                 | |
                 +-+                        0
+-------+-------+-------+-------+-------+
0      20      40      60      80     100   ms


Ezért is építettem egy javítást a sidrec.lua módosított változatába, a trigger bit felfutó élénél az előző megszakításban a mentett állapotát 0-ra állítja. De ez a megoldás sem mindig jó, a legbiztosabb lenne az eredeti (nem hatékonyan tömöríthető) esemény alapú formátum használata, különösen ha egyébként is csak átmeneti file a kimenet.
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 09:43:00
Az eredeti Last Ninja 2 SID file hol található? :oops: Lehet a Lua script hibája is, a file formátum nem teszi lehetővé annak a tárolását, ha egy SID regiszter egy 50 Hz-es megszakítás időtartamán belül egynél többször változik. Ez problémát okozhat például a trigger bitnél: ha a lejátszó egy új hang indítását úgy oldja meg, hogy csak rövid időre 0-ra állítja, majd azonnal 1-re, akkor ez az esemény elveszhet:
A módosított sidplay ugyenilyen módon ment, 50Hz-enként az összes regiszter tartalmát, és az envelope utánzás is csak a megszakításokban fut. Egyébként tényleg olyan, mintha a sustain maradna el.
Ez a kettő jutott most így eszembe, ahol ezt a jelenséget tapasztaltam, és eszembe is jutott :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 10:41:35
Egyelőre csak a GARFIELD.SID-et néztem, de ott valóban sidrec.lua probléma van:

[attachurl=1]
[attachurl=2]
[attachurl=3]

Az első felvétel a javítás nélküli változattal készült, ez teljesen rossz, a másodiknál a sidrec.lua tartalmazta ezt:
Code: Lua
  1.       if sidReg == 0x04 or sidReg == 0x0B or sidReg == 0x12 then
  2.         if AND(v, 0x01) > AND(sidState[sidReg], 0x01) and frameCnt > 0 then
  3.           local p = sidReg * 655 + frameCnt - 1
  4.           outBuf[p] = AND(outBuf[p], 0xFE)
  5.         end
  6.       end
Így sem tűnik tökéletesnek, de talán újra össze kellene hasonlítani az eredetivel. :oops: Elméletileg SID kártyával a sid.com és a SIDPLAY kimenetének azonosnak kellene lennie, egyébként a sidrec.lua hibás felvételt készített.

Szerk.: a Last Ninja 2-nél ilyen lett a felvétel:
[attachurl=4]
[attachurl=5]

Ez a "javított" script, az 1-es felvételek a fenti kódrészlet törlése után készültek:
[attachurl=6]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 11:32:20
Esetleg a sidrec.lua kimeneti formátumát tovább lehetne fejleszteni, hogy valamelyik nem használt bit (pl. a 3-as regiszter felső bitje) legyen a trigger kezdeti állapota az adott megszakítási ciklusban, így nem veszik el ez az információ.
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 12:44:55
Ez így hangzásra megegyezik az eredetivel :)
Azt nem értem, hogy egy általam módosított lua-t (sidrecn.lua lejjebb csatoltam) használtam tegnap, ami minden megszakításban kiírja a d400-d418h-t a tömbbe, miért rossz, amikor a módosított sidplay-ben ugyanezt teszem, igaz ott már a volume értékek envelope "emuláltak", de az envelope emuláció is csak a megszakításokban történik, tehát elméletileg ugyanennek a hibának ki kéne jönnie.
A trigger alatt a gate bitet érted?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 13:08:32
Azt nem értem, hogy egy általam módosított lua-t (sidrecn.lua lejjebb csatoltam) használtam tegnap, ami minden megszakításban kiírja a d400-d418h-t a tömbbe, miért rossz, amikor a módosított sidplay-ben ugyanezt teszem, igaz ott már a volume értékek envelope "emuláltak", de az envelope emuláció is csak a megszakításokban történik, tehát elméletileg ugyanennek a hibának ki kéne jönnie.

Nem tudom pontosan, hogyan működik a burkológörbe emuláció a SIDPLAY-ben. :oops: De például a GARFIELD.SID-ben a problémás hangok burkológörbéje 0,9,0,9, azaz nulla a sustain, talán nem cseng le erre a szintre? Szerk.: ha jól látom, van még az 50 Hz-es burkológörbe emuláción kívül ellenőrzés a regiszterek írásakor hogy változik-e az érték, és ha igen, akkor (bár ebben nem vagyok biztos) újraindítja a burkológörbét:
Code: ZiLOG Z80 Assembler
  1. .   D06E  21 1F 00     LD    HL, 001F
  2. .   D071  19           ADD   HL, DE
  3. .   D072  1A           LD    A, (DE)
  4. .   D073  BE           CP    (HL)
  5. .   D074  77           LD    (HL), A
  6. .   D075  28 03        JR    Z, D07A
  7. .   D077  2C           INC   L
  8. .   D078  36 00        LD    (HL), 00
  9. .   D07A  D1           POP   DE
  10. .   D07B  DD E9        JP    (IX)

Quote
A trigger alatt a gate bitet érted?

Igen.
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 13:41:17
Nem tudom pontosan, hogyan működik a burkológörbe emuláció a SIDPLAY-ben. :oops: De például a GARFIELD.SID-ben a problémás hangok burkológörbéje 0,9,0,9, azaz nulla a sustain, talán nem cseng le erre a szintre? Szerk.: ha jól látom, van még az 50 Hz-es burkológörbe emuláción kívül ellenőrzés a regiszterek írásakor hogy változik-e az érték, és ha igen, akkor (bár ebben nem vagyok biztos) újraindítja a burkológörbét.

Már én sem :D ,de nem az igazi.
Összehasonlítottam a két kimenetet (az általam módosítottat, és az újat), a régiben a 4. byte fix 41h, míg az újban van 40h is, vagyis egy release után kezdődhet az attack.
A burkológörbe elindítás elképzelhető, biztosat nem állíthatok :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 14:37:20
Esetleg a sidrec.lua kimeneti formátumát tovább lehetne fejleszteni, hogy valamelyik nem használt bit (pl. a 3-as regiszter felső bitje) legyen a trigger kezdeti állapota az adott megszakítási ciklusban, így nem veszik el ez az információ.
Így gondoltad?
Title: Re: SID lejátszó
Post by: endi on 2017.February.05. 14:56:03
össze kéne a jobb sid-eket gyűjteni amik jól szólnak ep-n is, és egy videóba összerakni, és megmutatni a c64-eseknek. szerintem érdekesnek találnák.
azt ne áruljuk el hogy a teljes cpu időt elviszi a lejátszás : o )
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 15:14:50
Így gondoltad?

Igen, csak kisebb módosítással:
[attachurl=1]
[attachurl=2]

Ez a 3. regiszter 7. bitjét beállítja, ha az adott periódusban felfutó él fordult elő, egyébként a bit 0 marad. A konvertáló program most már ezt a bitet is figyeli ha a gate bit 1:
Code: Diff
  1.  unsigned char SID_Channel::calculateVolume(int nCycles)
  2.  {
  3.    double        tmp = 0.0;
  4.    unsigned char sustainLevel = (unsigned char) (((r[6] >> 4) & 0x0F) * 17);
  5. -  if ((r[4] & 0x01) != 0 && envState == 2) {
  6. +  if ((r[4] & 0x01) != 0 && (envState == 2 || (r[3] & 0x80) != 0)) {
  7.      envState = 0;
  8.    }
  9.    else if ((r[4] & 0x01) == 0) {
  10.      if (envState == 0)
Még a sid.s lejátszót kellene módosítani hogy figyelembe vegye ezt a változtatást. Esetleg a lefutó éleket is figyelni lehetne, bár azok valószínűleg kevésbé fontosak.
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 15:33:51
Köszi, lassan kezdem elölről a konvertálást, most gyűjtöttem ki a kiválasztott sid-ek hosszait.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 15:48:23
azt ne áruljuk el hogy a teljes cpu időt elviszi a lejátszás : o )

Miért ne vinné el, ha a legjobb minőség a cél? :) Természetesen játékba vagy demóba épített lejátszónál lehetséges 8 kHz-es frekvencia, a gyűrűmoduláció effektus törlése, vagy egyéb gyorsítás.

Köszi, lassan kezdem elölről a konvertálást, most gyűjtöttem ki a kiválasztott sid-ek hosszait.

Szerintem érdemes lenne gyűjteni a még nem konvertált file-okat is, így esetleges újabb konvertáló programnál nem kell mindet újra felvenni, és lehetőség lenne SID kártyás lejátszásra is.
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 16:00:51
Miért ne vinné el, ha a legjobb minőség a cél? :) Természetesen játékba vagy demóba épített lejátszónál lehetséges 8 kHz-es frekvencia, a gyűrűmoduláció effektus törlése, vagy egyéb gyorsítás,de 11KHz-en még jó volt.

Igen, és amúgy is van kb 20% szabad CPU-nk :D , kipróbáltam 12,5 KHz-en, úgy már volt fagyi, gondolom olyan blokkoknál, aminek kicsomagolása tovább tartott.
Szerintem érdemes lenne gyűjteni a még nem konvertált file-okat is, így esetleges újabb konvertáló programnál nem kell mindet újra felvenni, és lehetőség lenne SID kártyás lejátszásra is.
Igen, erre jutottam én is, egyrészt egyszerűbb mindent külön file-ba menteni, és nem egyesével konvertálni, másrészt meg jól jöhet, igen a forrás file :)
Egy hibát jelzett a sid_conv.cpp fordulás közben, de azt még én is tudtam javítani :D (78. sor bezáró zárójel hiány :) )
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 16:05:20
Egy hibát jelzett a sid_conv.cpp fordulás közben, de azt még én is tudtam javítani :D (78. sor bezáró zárójel hiány :) )

Javítottam a feltöltött verziót. :oops:
Title: Re: SID lejátszó
Post by: nyuzga on 2017.February.05. 19:10:09
Ha már SID, akkor itt van egy ismert zene. Nagyon szépen szól a C64 emun.
A .prg az önindulós lejátszó.


Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 20:10:10
Itt a konverzió eredménye, amit eddig hallgattam, az jó volt, kivéve az Armalyte1 és a Dragon Ninja, előbbinél sztem vagy kevés a 10KHz, vagy használnak valami spéci cuccot, másodiknál meg a lejátszás is trükkös volt, lehet ez kevert be. Ghosts'n'Goblins1 érdekes, brekeg :D
Eredeti SID-ek:[attachurl=1]
SIDPlay-jel kinyert adatok:[attachurl=2]
SID_CONV-val konvertált adatok:[attachurl=3]
Lejátszható M64 fájlok:[attachurl=4]
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 20:39:17
Valami odapiszkított háromszögtábla elejére, lehet ez okozza a hibákat.
Megnézem holnap.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 21:08:13
Itt a konverzió eredménye, amit eddig hallgattam, az jó volt, kivéve az Armalyte1 és a Dragon Ninja, előbbinél sztem vagy kevés a 10KHz, vagy használnak valami spéci cuccot, másodiknál meg a lejátszás is trükkös volt, lehet ez kevert be. Ghosts'n'Goblins1 érdekes, brekeg :D

A felvételek készítésénél érdemes lehet még nagyobb Z80 órajelet (pl. 10 MHz) beállítani, 4 MHz-en előfordulhat, hogy lassul vagy akadozik az eredeti SID lejátszása a 6502 emuláció miatt. A CYBERNO2.M64-nél például hallható ilyen probléma.
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 21:16:27
A felvételek készítésénél érdemes lehet még nagyobb Z80 órajelet (pl. 10 MHz) beállítani, 4 MHz-en előfordulhat, hogy lassul vagy akadozik az eredeti SID lejátszása a 6502 emuláció miatt. A CYBERNO2.M64-nél például hallható ilyen probléma.
Igen, nekem is feltűnt, tegnap 6MHz-en ment az emu felvétel közben, ma nem mertem, hátha befolyásol valamit, most néztem meg a Paperboyt, az meg amiatt lassú, mert legalább 100Hz-es a lejátszási sebessége, foglalkozzunk az ilyenekkel, vagy könyveljük el veszteségként ? :)
Közben kijavítottam a hibát, ügyesen a decodeTablesBegin-t betettem a háromszögtábla kezdetére, gondolván úgyis csak töltés után van kicsomagolás, hát persze, hogy nem, mert folyamatosan csomagolunk :D , átvariáltam egy picit a dolgokat, sikerült besuvasztani 0500h alá, és már nincs brekegés :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.05. 21:25:11
A Paperboy pont 100Hz-es, betettem egy extra megszakítást az LPT-be, így már jó a sebessége.
Az jutott eszembe, hogy nagyobb munka lenne betenni a lejátszandó fájlba a sebességet, helyette be lehetne tenni a lejátszóba a sebességválasztást.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.05. 21:46:52
Az jutott eszembe, hogy nagyobb munka lenne betenni a lejátszandó fájlba a sebességet, helyette be lehetne tenni a lejátszóba a sebességválasztást.

A file formátumba nem lenne nehéz beépíteni, még mindig van például néhány szabad byte a blokkok végén, de tartalmazhatná esetleg EXOS fejléc is. Bár a lejátszót bonyolítaná a különböző sebességek megfelelő támogatása, és előfordulhat például 60 Hz is, ami nem 50 többszöröse. Az is egy lehetséges megoldás, hogy a konvertáló program gyorsítsa/lassítsa a felvételt, de ez rontaná a zene időzítésének a pontosságát. A sebességet a sid_conv.cpp-ben mindenesetre figyelembe kellene venni (a 20000 konstans a SID ciklusok száma két megszakítás között), hogy a burkológörbe emuláció pontos legyen.
Title: Re: SID lejátszó
Post by: geco on 2017.February.06. 08:44:48
A file formátumba nem lenne nehéz beépíteni, még mindig van például néhány szabad byte a blokkok végén, de tartalmazhatná esetleg EXOS fejléc is. Bár a lejátszót bonyolítaná a különböző sebességek megfelelő támogatása, és előfordulhat például 60 Hz is, ami nem 50 többszöröse. Az is egy lehetséges megoldás, hogy a konvertáló program gyorsítsa/lassítsa a felvételt, de ez rontaná a zene időzítésének a pontosságát. A sebességet a sid_conv.cpp-ben mindenesetre figyelembe kellene venni (a 20000 konstans a SID ciklusok száma két megszakítás között), hogy a burkológörbe emuláció pontos legyen.
Hm, EXOS fejléc lenne a legjobb, de a legkönnyebb meg a szabad bájt talán, de a leges legkönnyebb, a lejátszóba épített, manuális váltás :D
Melyik legyen?
Amúgy a 60Hz-et is meg lehetne valósítani a VINT bit mozgatásával az LPT-ben, csak ezzel már buknánk 256 byte-ot a betölthető fájl méretéből, az 50Hz többszöröseit meg tudom oldani a FILE szegmensen.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.06. 11:49:01
Hm, EXOS fejléc lenne a legjobb, de a legkönnyebb meg a szabad bájt talán, de a leges legkönnyebb, a lejátszóba épített, manuális váltás :D
Melyik legyen?

EXOS fejléc nélkül egyszerű:
[attachurl=1]

Ennél a verziónál opcionális paraméterként megadható a megszakítás frekvenciája 50 és 300 között:

./sid_conv [INTFREQ [BLKSIZE]] < INFILE > OUTFILE

Ezt a paramétert a burkológörbe emuláció figyelembe veszi, és az első blokkban 1FFDh pozíciónál (ha BLKSIZE = 8192) tárolja az INTFREQ - 50-et. Azaz az alapértelmezett 50 Hz-nél a kimenet azonos lesz a korábbi verzióval.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.06. 11:54:03
Az EXOS fejléc is könnyen megoldható a konvertáló programban, csak még definiálni kellene a formátum részleteit. Az az előnye mindenesetre lenne, hogy ROM-ba épített lejátszó EXOS modul betöltéssel is használható lehetne, és a frekvencia érték olvasásához nem kellene először kicsomagolni az első blokkot.

Így azonban a tömörítést is a sid_conv.cpp-be kellene építeni, ami a használhatóság szempontjából praktikus is, csak a program fordítása lenne bonyolultabb, mert kellene hozzá az ep128emu forráskódja és a libep128emu.a és libepcompress.a is.
Title: Re: SID lejátszó
Post by: geco on 2017.February.06. 13:12:43
EXOS fejléc nélkül egyszerű:
Ennél a verziónál opcionális paraméterként megadható a megszakítás frekvenciája 50 és 300 között:

./sid_conv [INTFREQ [BLKSIZE]] < INFILE > OUTFILE

Ezt a paramétert a burkológörbe emuláció figyelembe veszi, és az első blokkban 1FFDh pozíciónál (ha BLKSIZE = 8192) tárolja az INTFREQ - 50-et. Azaz az alapértelmezett 50 Hz-nél a kimenet azonos lesz a korábbi verzióval.
Te a megadható frekvenciára gondoltál? Én a CIA regiszter letárolására, még mielőtt utánanéztem :D , de látom ez sem egyszerű, mert van 4 db időzíthető CIA regiszter. Lehet a sidplay-be kéne beletenni, hogy kiírja a lejátszó rutin sebességét?
Title: Re: SID lejátszó
Post by: geco on 2017.February.06. 13:21:39
Az EXOS fejléc is könnyen megoldható a konvertáló programban, csak még definiálni kellene a formátum részleteit. Az az előnye mindenesetre lenne, hogy ROM-ba épített lejátszó EXOS modul betöltéssel is használható lehetne, és a frekvencia érték olvasásához nem kellene először kicsomagolni az első blokkot.

Így azonban a tömörítést is a sid_conv.cpp-be kellene építeni, ami a használhatóság szempontjából praktikus is, csak a program fordítása lenne bonyolultabb, mert kellene hozzá az ep128emu forráskódja és a libep128emu.a és libepcompress.a is.
Elméletileg ezek mind megvannak az EP128EMU SRC folderében, csak oda kéne tenni gondolom a sid_conv.cpp-t a könyvtárba, vagy az elérési utakat bedrótozni. Egy kérdés, linux alatt hogy lehet jó futásra készen shell scriptbe ágyazva futtatni a ./sid_conv <input> outputot, ha csak úgy simán bevágtam a fájlba a 120 parancsot, és futtattam (desktopomon volt minden) , akkor az első fájlt csinálta a amíg szegmentation errort dobott, végtelenségig az első fájllal dolgozva.
Az exos fejlécbe gondolom kéne egy header azonosító, a hossz ugye a megfelelő helyen, és nekünk a lejátszási sebesség, az 5. bájttól kezdve bárhová.
Az azonosító mondjuk lehet 4fh
a sebesség meg mehet egyből a hossz után az 5. bájtba.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.06. 15:48:04
Továbbfejlesztett konvertáló program, egyelőre még nem sokat teszteltem:
[attachurl=1]

Fordítás (a ../ep128emu2/ep128emu a lefordított emulátor forrás könyvtára):
g++ -Wall -O2 -march=native -I../ep128emu2/ep128emu -I../ep128emu2/ep128emu/src -L../ep128emu2/ep128emu sid_conv.cpp -o sid_conv -lepcompress -lep128emu -lm -s

Használat (már nem stdin és stdout a bemenet és kimenet, tehát elvileg lehetne Windowsos verzió is):
sid_conv INFILE OUTFILE [INTFREQ [BLKSIZE]]

EXOS fejléc:
- 00h, 4Fh (nem tudom, ezt már használja-e valami más is)
- tömörített adat mérete (2 byte)
- megszakítás frekvencia (2 byte)
- a zene hossza megszakításokban (3 byte)
- fenntartott, mindig 0 (7 byte)

A bemeneti file lehet tömörített formátumú is, és az első blokkban 3FFDh címen tartalmazhatja a megszakítás frekvenciát (- 50 Hz).

Elméletileg ezek mind megvannak az EP128EMU SRC folderében, csak oda kéne tenni gondolom a sid_conv.cpp-t a könyvtárba, vagy az elérési utakat bedrótozni. Egy kérdés, linux alatt hogy lehet jó futásra készen shell scriptbe ágyazva futtatni a ./sid_conv <input> outputot, ha csak úgy simán bevágtam a fájlba a 120 parancsot, és futtattam (desktopomon volt minden) , akkor az első fájlt csinálta a amíg szegmentation errort dobott, végtelenségig az első fájllal dolgozva.

Egy lehetséges megoldás (az új verziónál nem kell a < és >):
for i in *.sid ; do ./sid_conv < $i > `basename $i .sid`.m64 ; done
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.06. 18:45:09
EXOS fejléc:
- 00h, 4Fh (nem tudom, ezt már használja-e valami más is)
Úgy nézem ez még szabad.
Title: Re: SID lejátszó
Post by: geco on 2017.February.06. 22:29:34
Én meg eddig erre jutottam, kiírja a lejátszási sebességet, és az eddigi 50, 60, 100Hz mellé bekerült a 150,200,250,300Hz-es lejátszási sebesség is:
reject >350Hz
use 300Hz for 275-360Hz
use 250Hz for 225-275Hz
use 200Hz for 175-225Hz
use 150Hz for 125-175Hz
use 100Hz for 75-125Hz
use 60Hz for 55-75Hz
use 50Hz for 35-55Hz
A modositasnak koszonhetoen a LUA-ban is at kellett irni egy sort (linuxom meghulyult, atallt angol billentyuzetre, es barmire allitom, marad angol :lol: )
Azon gondolkoztam, hogy a LUA-t is módosítom , hogy ennek megfelelően tárolja a sebességet a 3ffdh címen, milyen kiosztasban vannak az ertekek?
0 - 50Hz
1 - 100 Hz ... ?

Koszi szepen a scriptet, majd hasznalom is :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.06. 22:31:06
Ja, a Paperboy elso zeneje 150 Hz-es volt.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.06. 23:42:51
Azon gondolkoztam, hogy a LUA-t is módosítom , hogy ennek megfelelően tárolja a sebességet a 3ffdh címen, milyen kiosztasban vannak az ertekek?
0 - 50Hz
1 - 100 Hz ... ?

50-nel kevesebbet kell tárolni, azaz 0 = 50 Hz, 50 = 100 Hz, stb. Lehetne például ennél a résznél:
Code: Lua
  1. outBuf = {}
  2. for i = 0, 0x3FFF do            
  3.   outBuf[i] = 0x00
  4. end
  5. outBuf[0x3FFD] = 10    -- 60 Hz
  6.  
  7. function writeBlock(isLast)
Title: Re: SID lejátszó
Post by: geco on 2017.February.07. 09:58:40
50-nel kevesebbet kell tárolni, azaz 0 = 50 Hz, 50 = 100 Hz, stb. Lehetne például ennél a résznél:
oké :) Már értem is a mi volt a -50 Hz :)
Title: Re: SID lejátszó
Post by: endi on 2017.February.07. 10:27:10
majd szóljatok ha lehet csinálni videót! megcsinálom szívesen. c64-eseknek mutogatjuk majd :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.07. 15:26:56
[attachurl=1]    (szerk.: kisebb javítás)
[attachurl=2]

Ez még lehet, hogy hibás, de elvileg támogatja a nem 50 Hz-es lejátszást (5 kHz-es DAVE megszakítás osztásával) és a burkológörbe újraindítását a PWM regiszter nem használt felső bitjével.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.08. 11:25:12
Továbbfejlesztett sidrecn.lua:
[attachurl=1]    (szerk.: playtime számítása javítva)
[attachurl=2]

A 0E/0F portok helyett a D400-D41F terület írását figyeli, így működik az alapértelmezett DAVE módban is. A kiírt sebesség értéket a video memóriából olvassa és tárolja az első blokkban. A PWM regiszter felső bitjét csak akkor állítja, ha az valóban jelent különbséget (konvertálásnál nincs jelentősége, de a SID kártyával lejátszható "nyers" formátum talán jobban tömöríthető így).
Title: Re: SID lejátszó
Post by: geco on 2017.February.08. 11:47:32
Továbbfejlesztett sidrecn.lua:
:smt041
Nem néztem még meg, de tuti jól működik, nem úgy, mint az én első memóriaolvasós verzióm, ami nem állította a PWM bit felső bitjét. A sebesség értéket mindig fix pozícióból veszi, vagy LPT alapján ( még nem néztem, majd este ) mert EXOS LPT-t buherálom.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.08. 11:57:25
A sebesség értéket mindig fix pozícióból veszi, vagy LPT alapján ( még nem néztem, majd este ) mert EXOS LPT-t buherálom.

Az LPT alapján, de a playtime számításánál nem vette figyelembe (ott maradt a fix 50 érték), amit most javítottam, és ahol még 50 Hz-et tételezett fel a kód, a sid_conv.cpp-ben is.

[attachurl=1]
[attachurl=2]
[attachurl=3]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.08. 12:19:22
A 150 Hz-es Paperboy snapshotban akadozik a zene, bár elsősorban azért, mert a felvétel 4 MHz-es konfiguráción készült. :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.February.08. 13:16:29
A 150 Hz-es Paperboy snapshotban akadozik a zene, bár elsősorban azért, mert a felvétel 4 MHz-es konfiguráción készült. :oops:
Van pár cucc, ami reprodukálásra vár, Cybernoid (ebből mindkettő, vagy csak a második? ) Paperboy )
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.08. 14:16:01
Ha a Z80 órajel növelésének nincs hátránya (nem tudom, a CIA időzítőket a lejátszó hogyan emulálja), akkor talán a legbiztosabb lenne mindet 10-20 MHz-en felvenni. :) SID kártya emuláció nélkül még így is elég gyors Alt+W-vel.
Title: Re: SID lejátszó
Post by: geco on 2017.February.08. 14:20:14
Ha a Z80 órajel növelésének nincs hátránya (nem tudom, a CIA időzítőket a lejátszó hogyan emulálja), akkor talán a legbiztosabb lenne mindet 10-20 MHz-en felvenni. :) SID kártya emuláció nélkül még így is elég gyors Alt+W-vel.
CIA időzítőkre sincs káros hatással, CIA értéktől függően helyez el VINT biteket az LPT-ben :) 10-20 MHz-en tuti nem lesz gond  :), én csak a 6-ra gondoltam, de egy 10-est lehet tolni neki majd.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.08. 14:46:41
Sok file konvertálására talán a leghatékonyabb lenne PC-s programot írni, csak nem tudom biztosan, a SID formátumból mi a lényeges, és mennyit kell emulálni a C64 hardveréből. Ha a teljes támogatás nem is cél, annyit talán tudhatna, amit a PLAYSID is. A CPU egyszerű, fel tudom használni a plus4emu forráskódjából. Esetleg a zenék hosszát is fel lehetne ismerni automatikusan, például hogy mikor lesz a memória tartalma azonos az első megszakítás utáni állapottal, de ez lehet, hogy nem megbízható.
Title: Re: SID lejátszó
Post by: geco on 2017.February.08. 14:58:17
Tuti ez lenne a legjobb megoldás, de ez iszonyú munka, nem?
Ergognomik vetette fel, hogy PLUS4emu-ban játsszuk le a SID-eket, és onnan nyerjük ki a regiszter értékeket, gondolom a megszakítások ugyanolyan pontosan mennek, mint C64-en mennének.
Amit most láttam, a CIA, és a SID regiszterek figyelése van megoldva a sidplay-ben, egyelőre más nem rémlik.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.08. 15:08:53
Tuti ez lenne a legjobb megoldás, de ez iszonyú munka, nem?

Nem feltétlenül, ha a "C64 emulátor" rész nagyon kezdetleges. Azaz gyakorlatilag csak a CPU, és a program bizonyos fix időközönként megszakításokat generál. Ez már csak azért is előnyös lenne, mert a SID, 2xCIA, VIC-II, stb. emulációja lassítaná a konvertálást.

Quote
Ergognomik vetette fel, hogy PLUS4emu-ban játsszuk le a SID-eket, és onnan nyerjük ki a regiszter értékeket, gondolom a megszakítások ugyanolyan pontosan mennek, mint C64-en mennének.

A Plus/4-ben nincs CIA (de van programozható 16 bites időzítő) és más az órajel, de talán vannak SID lejátszó programok a gépre, mivel kártyából több is készült. A PC-s program előnye elsősorban a nehézkes kézi felvétel (időtartam beállítása, zenék kiválasztása egyenként, stb.) elkerülés lenne.
Title: Re: SID lejátszó
Post by: geco on 2017.February.08. 15:26:36
Nem feltétlenül, ha a "C64 emulátor" rész nagyon kezdetleges. Azaz gyakorlatilag csak a CPU, és a program bizonyos fix időközönként megszakításokat generál. Ez már csak azért is előnyös lenne, mert a SID, 2xCIA, VIC-II, stb. emulációja lassítaná a konvertálást.
Gyanúsan ennyi, ami rémlik, NTSC bit, ha be van állítva, akkor 60Hz, egyébként vagy user interrupt (CIA), vagy 50Hz.
A Plus/4-ben nincs CIA (de van programozható 16 bites időzítő) és más az órajel, de talán vannak SID lejátszó programok a gépre, mivel kártyából több is készült. A PC-s program előnye elsősorban a nehézkes kézi felvétel (időtartam beállítása, zenék kiválasztása egyenként, stb.) elkerülés lenne.
jogos.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.08. 15:26:54
A könnyen kezelhető PC-s megoldás az szerintem sokaknak tetszene!
Title: Re: SID lejátszó
Post by: geco on 2017.February.08. 15:41:04
Ezeket használja a program:

m6502_nmi:     equ  $fffa           ; nmi vector address
m6502_reset:   equ  $fffc           ; reset vector address
m6502_int:     equ  $fffe           ; int vector address (also for BRK)

c64_irq_vec:   equ  $0314           ; C64 IRQ vector
c64_irq_cont:  equ  $ea31           ; C64 ROM IRQ chaining
c64_cia_timer: equ  $dc04           ; C64 CIA#1 timer

D400-D41f   SID registers
DC00-DC0f   CIA#1 registers
DD00-DD17   CIA#2 registers

A SID inicializálás után meghívja a set_speed rutint, ami ha CIA 0 (csak a DC04-05-öt nézi), akkor csekkolja, hogy NTSC-vagy PAL-e a SID, és ennek megfelelően állítja be a megszakítást, ha CIA nem 0, akkor annak megfelelően, és utána futtatja a fő kódot.
CIA#2 regiszterre hivatkozást nem láttam.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.08. 17:09:29
Van pölö a SizPlay (http://plus4world.powweb.com/software/SIzPlay), ami képes PSID fájlokat lejátszani SID-kártyán. A forrását el lehet érni a szerző saját oldalán. Ebből, meg némi Lua szkriptből talán össze lehetne eszkábálni valamilyen automatizált eszközt.
Title: Re: SID lejátszó
Post by: geco on 2017.February.08. 21:15:22
Sikerült befordítani a sid_conv.cpp-t :) , a balfaszságom miatt pár óra alatt :D , ezt nem részletezném, de convertáltam a két példa SID-edet, így holnap szüttyögök majd az új betöltéssel a sidbintben.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.09. 09:23:48
Valamennyire már működik a PSID konvertáló, de a hosszúság automatikus felismerésére az ötletem nem vált be, a lejátszókban sok az önmódosító kód, és így nem ismétlődik a memória tartalma. Egyelőre csak a parancssorban lesz megadható, ez még mindig automatizálható egy shell script és a Songlengths.txt használatával. Sok file azonban hiányzik a Songlengths.txt-ből (vagy valahol van újabb verziója?).
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.09. 10:40:32
Valamennyire már működik a PSID konvertáló, de a hosszúság automatikus felismerésére az ötletem nem vált be, a lejátszókban sok az önmódosító kód, és így nem ismétlődik a memória tartalma. Egyelőre csak a parancssorban lesz megadható, ez még mindig automatizálható egy shell script és a Songlengths.txt használatával. Sok file azonban hiányzik a Songlengths.txt-ből (vagy valahol van újabb verziója?).
Csak arról a Songlengths.txt tudok, ami HVSC csomagban van. Azonban létezik egy SOASC, vagy valami hasonló nevezetű gyűjtemény, ami elvileg az összes HVSC-ben megtalálható SID átkonvertálva MP3-ba. Abból esetleg ki lehet olvasni a hosszakat.

Más lehetőség a zene hosszak megállapításra lehetne egy olyasféle algoritmus, ami gyűjti a SID írásokat vagy regiszter állapotokat és ezekben keres valamilyen megadott minimális hosszúságú (15-30s?) szekvencia ismétlődést. De ezen kicsit hosszabban kellene gondolkodni.
Title: Re: SID lejátszó
Post by: geco on 2017.February.09. 10:42:31
Sok file azonban hiányzik a Songlengths.txt-ből (vagy valahol van újabb verziója?).
Én is a legfrissebb HVSC csomagból szedtem ki a songlengthet, 48943 entry van benne, amiket én néztem, mind benne volt :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.09. 10:52:59
Én is a legfrissebb HVSC csomagból szedtem ki a songlengthet, 48943 entry van benne, amiket én néztem, mind benne volt :)

Most valóban megtaláltam például a Paperboy-t, de az md5sum különbözik:

grep -C1 -e "Paperboy\.sid" C64Music/DOCUMENTS/Songlengths.txt
; /DEMOS/M-R/Paperboy.sid
d8b2d332788b272838cbab54f6e412dc=0:30
--
; /MUSICIANS/C/Cooksey_Mark/Paperboy.sid
c50dc3428cc1b95e75a8179da4092866=1:16 3:46 0:31 0:15(G) 0:29

md5sum -b C64Music/MUSICIANS/C/Cooksey_Mark/Paperboy.sid
3b50c8047c7921e8937164505ef158ed *C64Music/MUSICIANS/C/Cooksey_Mark/Paperboy.sid
Title: Re: SID lejátszó
Post by: geco on 2017.February.09. 11:09:49
Most valóban megtaláltam például a Paperboy-t, de az md5sum különbözik:
Ilyen apróságokkal nem kell foglalkozni ;)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.09. 12:31:20
Ez a verzió még hibás lehet, de valamennyire már használható:
[attachurl=1]
sid_conv.cpp pontosabb 50 és 60 Hz-es időzítéssel (a tényleges PAL és NTSC C64 frekvenciákat tételezi fel a burkológörbe emulációnál):
[attachurl=2]

Fordítás és példa a program használatára:

g++ -Wall -O2 -march=native -I../plus4emu -I../plus4emu/src -L../plus4emu sid_dump.cpp -o sid_dump -lplus4emu -lpthread -lm -s

./sid_dump C64Music/MUSICIANS/C/Cooksey_Mark/Paperboy.sid paperboy.raw C64Music/DOCUMENTS/Songlengths.txt MUSICIANS/C/Cooksey_Mark/Paperboy.sid
./sid_dump GARFIELD.SID garfield.raw C64Music/DOCUMENTS/Songlengths.txt MUSICIANS/B/Baldwin_Neil/Garfield.sid


Az időtartamok a parancssorban közvetlenül is megadhatók, az alapértelmezés 4 perc.
Title: Re: SID lejátszó
Post by: geco on 2017.February.09. 13:58:03
Ez a verzió még hibás lehet, de valamennyire már használható:
sid_conv.cpp pontosabb 50 és 60 Hz-es időzítéssel (a tényleges PAL és NTSC C64 frekvenciákat tételezi fel a burkológörbe emulációnál):

Az időtartamok a parancssorban közvetlenül is megadhatók, az alapértelmezés 4 perc.
Tehát ha jól értem, akkor már el is készült a direkt SID-ből konvertáló program első verziója?
Gratula :)
Az új sid_conv.cpp használható továbbra is EP-ből mentett raw-ra is?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.09. 20:27:39
Az új sid_conv.cpp használható továbbra is EP-ből mentett raw-ra is?

Igen. A formátum ugyanaz maradt, bár ebben a verzióban még kiegészítettem CIA megszakításnál a tényleges számláló értékkel (a pontosság talán hasznos lehet az ADSR bug miatt) a 3FFB-3FFCh pozíciónál az első blokkban:
[attachurl=1]
[attachurl=2]
A CIA számláló sebességét is pontosítottam. A régebbi felvételek továbbra is használhatók, illetve az újakat a sid.s le tudja játszani tömörítés után.

A Paperboy nem jó, ugyan 150 Hz-es frekvenciát ismer fel a program, de így túl gyors a felvétel, 50 Hz-en lejátszva viszont jobbnak tűnik. Egyszerű 50 Hz-es video megszakítást használó SID file jól konvertálható, ezek például már a fenti programokkal készültek (az EXOS fejlécet levágtam az elejéről, hogy a SIDBINT le tudja játszani):
[attachurl=3]
[attachurl=4]
Title: Re: SID lejátszó
Post by: geco on 2017.February.09. 20:40:12
A Paperboy nem jó, ugyan 150 Hz-es frekvenciát ismer fel a program, de így túl gyors a felvétel, 50 Hz-en lejátszva viszont jobbnak tűnik.
Úgy rémlik az igazi játékból is, hogy az elején a zenét tök gyorsan játsza, és játék közben lassabban, és a SID lejátszása közben is így műxik, az első zene ugyanaz, mint a 2. csak az 150Hz-es, míg a 2. 50Hz-es, kiszámoltam a múltkor a CIA megszakítás alapján, majdnem kereken 150Hz jön ki az elsőre.
A file headerben a megszakítási sebesség csak 60, és 50 többszöröse lehet? Mert ha igen, akkor nem szórakozok a kicsomagolt első blokkból való megállapítással, hanem veszem a file headert, ez egyszerűbbnek tűnik.
Befordítottam a dumpot, és a convot (ma már ment, mint a villám, csak a plus4emut kellett előtte befordítani, sikertelenül ,mert a libpng-t nem találta, de ez nekem pont elég volt a libplus4emuhoz :D ), tetszik a működési mechanizmus, nem beszélve a gyorsaságról, most jönne majd a teszt :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.09. 20:44:54
A file headerben a megszakítási sebesség csak 60, és 50 többszöröse lehet? Mert ha igen, akkor nem szórakozok a kicsomagolt első blokkból való megállapítással, hanem veszem a file headert, ez egyszerűbbnek tűnik.

Az első blokk végén már csak a "raw" formátum tartalmazza a sebességet, konvertáltnál az EXOS fejlécben található. Itt egyszerű 16 bites érték Hz-ben, és elvileg bármi lehet, de valószínűleg csak ritkán nem 50 vagy 60 többszöröse, tehát az ilyenek támogatása nem igazán lényeges.
Title: Re: SID lejátszó
Post by: geco on 2017.February.09. 20:53:48
Az első blokk végén már csak a "raw" formátum tartalmazza a sebességet, konvertáltnál az EXOS fejlécben található. Itt egyszerű 16 bites érték Hz-ben, és elvileg bármi lehet, de valószínűleg csak ritkán nem 50 vagy 60 többszöröse, tehát az ilyenek támogatása nem igazán lényeges.
Ok, köszi, így is álltam neki végülis, itt is max 300Hz-ig megy majd a beállítás (és csak 50 Hz-enként) némi pontatlansággal az EXOS LPT egyenetlensége miatt, vagy álljak át egy saját LPT-re? (mert amúgy is van szabad szegmens)
Title: Re: SID lejátszó
Post by: geco on 2017.February.09. 21:17:09
Itt az újabb verzió, még csak egy konvertált zenével próbáltam (50Hz-es volt), kezeli az új file headert, ha nem modul volt a betöltött file,vagy nem 4fh-s modul (ezt elszúrtam, M-re gondoltam, a 4fh meg O, de mindegy, ez lesz a modul headerünk :) ),vagy a mérete nagyobb, mint 5e00h, akkor új fájlt kér, elméletileg működik az 50x Hz frekvencián való lejátszás max 300Hz-ig, ezt most fogom tesztelni majd a paperboyjal.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.09. 21:18:05
Ok, köszi, így is álltam neki végülis, itt is max 300Hz-ig megy majd a beállítás (és csak 50 Hz-enként) némi pontatlansággal az EXOS LPT egyenetlensége miatt, vagy álljak át egy saját LPT-re? (mert amúgy is van szabad szegmens)

50 Hz többszöröseihez szerintem elég az EXOS LPT az LPB-ket jól választva, bár egyes bővítők (pl. ZozoTools) módosíthatják. De az elején mindig van 28 9 soros LPB, ami összesen 252 sor, utána az alsó keret 14 vagy 6 (ZT esetén) sor. Ha nem is teljesen pontos az időzítés, a hiba 1 ms alatt lehet, ami nem igazán hallható.

A külön LPT előnye lehetne, hogy ha minden sor külön LPB, akkor 15611 Hz tetszőlegesen osztható a VINT-es LPB folyamatos változtatásával, de nem tudom, megérné-e ez a lejátszó kód bonyolítását, ha a legtöbb SID file 50 Hz-es.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.09. 21:21:25
elméletileg működik az 50x Hz frekvencián való lejátszás max 300Hz-ig, ezt most fogom tesztelni majd a paperboyjal.

Nekem működik, azaz túl gyors (mint eredetileg). :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.09. 21:27:06
Nekem működik, azaz túl gyors (mint eredetileg). :)
:smt043
Egy picit nekem is gyorsabbnak tűnt, mint emlékeimben, de a SID hosszúságok is azt bizonyítják, hogy ez a túl gyors a jó gyors :lol: , amúgy amikor 50Hz-en ment a lejátszás, az első, és a második zene tök ugyanaz volt, ekkor meg ez volt a furcsa :D
Akkor már csak az a kérdés, hogy csináljak-e saját LPT-t soronkénti LPB-vel a megszakítások jobbá tételére, esetleg jobb Logoval ,vagy maradjon így?

Ergognomiknak : :) (hasonlít)
[attachurl=1]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.10. 19:04:14
Egyszerű script több file konvertálásához:
[attachurl=1]

ls
DEMOS  DOCUMENTS  MUSICIANS  sid2m64.sh  sid_conv  sid_dump

find MUSICIANS -type f -name "*.sid" -exec ./sid2m64.sh "{}" \;


Mivel minden kimeneti file az aktuális könyvtárba kerül, több azonos nevű esetén felülíródnak. Valószínűleg nem működik jól, ha szóköz vagy egyéb problémás karakterek vannak a file névben, és akkor sem, ha véletlenül tartalmazza azt, hogy ".raw-" (bár ez valószínűtlen). :oops:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.11. 12:31:00
Az aufmonty.sid-nél hibásan működött a sid_dump.cpp, javított verzió:
[attachurl=1]

A problémát az okozta, hogy a file egy részét felülírta a ROM területen található rutin ($EA20-$EA3F), ilyen esetben a program most áthelyezi a rutint $0420 kezdőcímre, egyébként marad az eredeti helyén.

Szerk.: néhány ezek (https://enterpriseforever.com/sound/sid-lejatszo/msg62087/#msg62087) közül továbbra sem működik, három a fejléc szerint hangmintát használ, kettőnél lefagy az init rutin, és egy túl sok zenét/effektust tartalmaz (ami ugyan könnyen javítható lenne, jelenleg a program legfeljebb 32-t fogad el).

Próba konverzió, még nem ellenőriztem, hogy jó-e az eredménye:
[attachurl=2]
Title: Re: SID lejátszó
Post by: geco on 2017.February.11. 19:48:07
Szerk.: néhány ezek (https://enterpriseforever.com/sound/sid-lejatszo/msg62087/#msg62087) közül továbbra sem működik, három a fejléc szerint hangmintát használ, kettőnél lefagy az init rutin, és egy túl sok zenét/effektust tartalmaz (ami ugyan könnyen javítható lenne, jelenleg a program legfeljebb 32-t fogad el).
A MYTH-ről, és  a GPC-ről tudom, hogy digi van bennük (anno sokat játszottam velük), a Mythben a második tune a digi (Welcome to Myth szöveg), sidplay-jel azt átugrottam, és úgy vettem fel a harmadikat, a GPC-ben digi gitár van, lehet az első kettő tune-ban.
Próba konverzió, még nem ellenőriztem, hogy jó-e az eredménye:
A Last Ninja 2, Cybernoid tuti jó, azokat konvertáltam én is, és teszteltem is :), a Paperboy első számában (a gyorsban) mintha ez egyik csatorna túl halk lenne, a többi jó.
Title: Re: SID lejátszó
Post by: geco on 2017.February.11. 19:52:04
Itt az új verzió, saját LPT-t használ, új logoval, még azon gondolkoztam, hogy egy mozgó raster bart be lehetne tenni.
Egy hibát találtam, a rövid sid-ek lejátszása nem volt jó, mert azt nem figyeltem, hogy az első kicsomagolás a csomag végére is ért-e, javítva.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.11. 20:55:17
a Paperboy első számában (a gyorsban) mintha ez egyik csatorna túl halk lenne, a többi jó.

Ezt talán az okozhatja, hogy csak a lejátszás gyorsabb, de a burkológörbék A,D,R paraméterei ugyanazok maradtak, mint az 50 Hz-es változatban. SID kimenetet használva is bizonytalan a lejátszás, illetve a SIDPLAY-nél változik a hang a Z80 órajeltől függően. De még megnézem, nincs-e valamilyen hiba. Az is lehet, hogy ha a sid_conv.cpp nem emulálná az ADSR bugot, az javítana a konvertálás eredményén.

Itt az új verzió, saját LPT-t használ, új logoval, még azon gondolkoztam, hogy egy mozgó raster bart be lehetne tenni.

Jó lett, elvileg 4 MHz-es gépen még problémás lehet az 50 Hz-nél lényegesen nagyobb sebesség, de úgy látom, 150-nél még marad elég idő, ennél gyorsabb file pedig még nem volt eddig:
[attachthumb=1]
Ezen egy keveset sikerült javítani a frekvencia szorzó rutin átalakításával, de így nagyobb és bonyolultabb lett, tehát nem igazán érné meg:
[attachthumb=2]

Bár ez csak a konvertáló programot érinti, lehetőség lenne még arra is, hogy eredetileg 50 Hz-es file is nagyobb frekvenciájú (pl. 100 Hz-es) burkológörbe emulációt használjon, de ez növelné a kimenet méretét.
Title: Re: SID lejátszó
Post by: geco on 2017.February.11. 21:26:09
Jó lett, elvileg 4 MHz-es gépen még problémás lehet az 50 Hz-nél lényegesen nagyobb sebesség, de úgy látom, 150-nél még marad elég idő, ennél gyorsabb file pedig még nem volt eddig:
Köszi :) , eggyel találkoztam, a HVSC.SID 200Hz-es volt, az is ment gond nélkül, még azon gondolkozom, hogy a volume display csak 50Hz-enként legyen frissítve, csak ezt akkor át kell tennem a FILE-t tartalmazó lapra, mert már nem tudom besuvasztani a 0000-0500h területre.
Ezen egy keveset sikerült javítani a frekvencia szorzó rutin átalakításával, de így nagyobb és bonyolultabb lett, tehát nem igazán érné meg:

Bár ez csak a konvertáló programot érinti, lehetőség lenne még arra is, hogy eredetileg 50 Hz-es file is nagyobb frekvenciájú (pl. 100 Hz-es) burkológörbe emulációt használjon, de ez növelné a kimenet méretét.
Attól függ mennyivel lett nagyobb, és bonyolultabb, egyelőre 3 byte szabad a fent említett területen, ha a volume display elköltözne, akkor kb 30 byte felszabadulna, és esetleg a 0000h-002eh területet használhatnánk még, meg a 007a-009fh-t
Nagyon jó lett a SID_CONV, és SID_DUMP kombó így 50Hz-en is, nem tudom érdemes-e felmenni 100Hz-re, lehet akkor már lapoznunk kéne a megnövekedett file méret miatt, az IK konvertálásakor 6:32-re kellett lemennem a múltkor (érdekes az IK+ jóval tömöríthetőbb, abból a teljes hossz, több mint 7 perc is 20Kb alatt volt)

A Monty On the Run-nal bezárólag teszteltem (hol rövidebben, hol hosszabban), minden fasza volt, a következőkben hallottam érdekességet:
clystron - néha recseg , lehet valami spéci fícsört használ
Dragon Ninja1 - néha recseg , lehet valami spéci fícsört használ
Expfist el vannak tolódva a hosszak, ez a songlengths.txt hibája (úgy emékszem, eggyel több hossz van a txt-ben, mint ahány tune a sid-ben :D )
IK cheatelni kell, mert több,mint 10 perces, a 3-as SID regiszter nem használt bitjének használata előtt 6:32 még belefért az 5e00h hosszba
ln-07 az elején hallottam érdekességet, gondolom itt valami filtert használ

Továbbmentem a Ninja-ig, a Navy Seals első három (tovább ezt nem néztem) csupa 0-át csomagol ki.
Rambo-01-ben a 3. byte végig 0 (volume-ot is tartalmazó byte)

Végül a végére értem (pár kihagyással, ott ahol nagyon sok volt, csak párat töltöttem be)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.11. 21:52:19
Köszi :) , eggyel találkoztam, a HVSC.SID 200Hz-es volt, az is ment gond nélkül, még azon gondolkozom, hogy a volume display csak 50Hz-enként legyen frissítve, csak ezt akkor át kell tennem a FILE-t tartalmazó lapra, mert már nem tudom besuvasztani a 0000-0500h területre.Attól függ mennyivel lett nagyobb, és bonyolultabb, egyelőre 3 byte szabad a fent említett területen, ha a volume display elköltözne, akkor kb 30 byte felszabadulna, és esetleg a 0000h-002eh területet használhatnánk még, meg a 007a-009fh-t

Elég nagy a méretkülönbség, mert ciklus helyett egyszerűen "kiírtam" ezt 8-szor, illetve az ADD HL,DE-k helyére FEh (CP utasítás) byte került a szorzó 0 bitjeinél:

Code: ZiLOG Z80 Assembler
  1.         add   hl, hl
  2.         rla
  3.         add   hl, de
  4.         adc   a, c

Ez természetesen csak a 0-2Eh területen fért el, és minden szorzó más kódot igényelne (bár a generálása történhet a FILE-os szegmensen). A CP-k helyett tulajdonképpen ki is lehetne hagyni az utasításokat, ami még gyorsabb valamivel. A hívásokat RST 0-kra lehetne cserélni, ami viszont megtakarít egy kevés helyet, és az eredeti rutin (amit ugyan használ a sebesség tesztelő kód, de ott lehetne másolata) törlése is. Azonban amint az a képeken látható, nem nagy a különbség az eredeti kódhoz képest, ezért nem biztos, hogy megéri.

A kivezérlésjelző "költöztetése" nem igényelné a hangminta megszakítás tiltását?

Quote
Továbbmentem a Ninja-ig, a Navy Seals első három (tovább ezt nem néztem) csupa 0-át csomagol ki.

Ez sid_dump bug lehet (lefagyott a 6502 kód?), holnap megnézem.

Az IK tömörítésén talán lehetne javítani a minőség romlása árán, például a PWM, vagy eseteg a frekvencia vagy hangerő felbontásának a csökkentésével.
Title: Re: SID lejátszó
Post by: geco on 2017.February.11. 22:08:07
Elég nagy a méretkülönbség, mert ciklus helyett egyszerűen "kiírtam" ezt 8-szor, illetve az ADD HL,DE-k helyére FEh (CP utasítás) byte került a szorzó 0 bitjeinél:

Code: ZiLOG Z80 Assembler
  1.         add   hl, hl
  2.         rla
  3.         add   hl, de
  4.         adc   a, c

Ez természetesen csak a 0-2Eh területen fért el, és minden szorzó más kódot igényelne (bár a generálása történhet a FILE-os szegmensen). A CP-k helyett tulajdonképpen ki is lehetne hagyni az utasításokat, ami még gyorsabb valamivel. A hívásokat RST 0-kra lehetne cserélni, ami viszont megtakarít egy kevés helyet, és az eredeti rutin (amit ugyan használ a sebesség tesztelő kód, de ott lehetne másolata) törlése is. Azonban amint az a képeken látható, nem nagy a különbség az eredeti kódhoz képest, ezért nem biztos, hogy megéri.
Hm, holnap megnézem, lehet jól jön majd egyszer az a kis gyorsulás is :D
A kivezérlésjelző "költöztetése" nem igényelné a hangminta megszakítás tiltását?
Elméletileg nem, mert a 3-as lapra kerülne a kivezérlés, ez csak akkor okozhatna gondot, ha ezalatt az idő alatt történne még egy videó megszakítás.
Ez sid_dump bug lehet (lefagyott a 6502 kód?), holnap megnézem.

Az IK tömörítésén talán lehetne javítani a minőség romlása árán, például a PWM, vagy eseteg a frekvencia vagy hangerő felbontásának a csökkentésével.
simán lehet, mert gyanúsan az összes üres :)
Ááá, szerintem pont jó így az IK miatt nem érdemes sztem belenyúlni, legalább 6 percet át lehet alakítani, és ugyi a SID_DUMPnak időtartamot is meg lehet adni :) Én még anno a LUA-val mentettem a 6:32-es hosszú IK-t :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.12. 08:31:18
Elméletileg nem, mert a 3-as lapra kerülne a kivezérlés, ez csak akkor okozhatna gondot, ha ezalatt az idő alatt történne még egy videó megszakítás.

Az is egy lehetőség, hogy a video megszakítás nagy része átkerüljön a FILE-os szegmensre. Ha a hangminta lejátszás nem használja a 2. és 3. lapot, akkor a kód kerülhet a 2. lapra, a video szegmens pedig átmenetileg a 3. lapra. A szegmensek mentése, beállítása és visszaállítása ugyan lassulást eredményezne, de a több hely miatt talán jobban optimalizálható lenne a kód. Csak a szorzás gyorsítása megoldható lapozás nélkül is, ezért ennek az átalakításnak elsősorban az lehetne az előnye, ha 400h alatt is elférne a lejátszó a 0. lapon.

Ha nem probléma a nagyobb verem használat, akkor valamivel gyorsabb lehetne először mind a 12 regisztert kiolvasni (fordított sorrendben) és a verembe menteni, majd a megfelelő helyeken POP utasításokkal olvasni. Ennek az is előnye, hogy az adat feldolgozása közben már nincs szükség a kicsomagolt blokk szegmensére, így az kilapozható.
Title: Re: SID lejátszó
Post by: geco on 2017.February.12. 08:52:16
Az is egy lehetőség, hogy a video megszakítás nagy része átkerüljön a FILE-os szegmensre. Ha a hangminta lejátszás nem használja a 2. és 3. lapot, akkor a kód kerülhet a 2. lapra, a video szegmens pedig átmenetileg a 3. lapra. A szegmensek mentése, beállítása és visszaállítása ugyan lassulást eredményezne, de a több hely miatt talán jobban optimalizálható lenne a kód. Csak a szorzás gyorsítása megoldható lapozás nélkül is, ezért ennek az átalakításnak elsősorban az lehetne az előnye, ha 400h alatt is elférne a lejátszó a 0. lapon.
Ez megfontolandó :) , és elméletileg nem is kell menteni a szegmenseket, simán mehetnek előre beállított értékekkel.
Ha nem probléma a nagyobb verem használat, akkor valamivel gyorsabb lehetne először mind a 12 regisztert kiolvasni (fordított sorrendben) és a verembe menteni, majd a megfelelő helyeken POP utasításokkal olvasni. Ennek az is előnye, hogy az adat feldolgozása közben már nincs szükség a kicsomagolt blokk szegmensére, így az kilapozható.
Elméletileg nem, a hiba rutin került 00a0h-ra, a verem 0100h-n, és lejátszás közben +6-7 érték kerül be, a FILE-nak kellett más helyre tenni a vermet, mert az belecsúszott a hiba rutinba.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.12. 09:01:01
és elméletileg nem is kell menteni a szegmenseket, simán mehetnek előre beállított értékekkel.

A mentés akkor lehetne hasznos, ha video megszakítás kezelése közben történik újabb video megszakítás. Ilyesmi normál esetben ugyan nem fordul elő, esetleg a lejátszás indításakor vagy ha a megszakítás egyéb okból hosszabb ideig tiltott volt, de a probléma elkerülhető az engedélyezés előtt a B4 porton törölve a tárolókat.

A Navy Seals azért nem működik, mert felülírja nullákkal az FFFE-FFFF címen az IRQ vektort. Ha valójában nem hasznos adatot tárol ott, akkor javítható lenne az IRQ cím beállításával az init rutin futása után.
Title: Re: SID lejátszó
Post by: geco on 2017.February.12. 09:31:23
A mentés akkor lehetne hasznos, ha video megszakítás kezelése közben történik újabb video megszakítás. Ilyesmi normál esetben ugyan nem fordul elő, esetleg a lejátszás indításakor vagy ha a megszakítás egyéb okból hosszabb ideig tiltott volt, de a probléma elkerülhető az engedélyezés előtt a B4 porton törölve a tárolókat.
Végülis nem nagy időveszteség, és gondolom nem a vermet kéne hassználni a problémák elkerülése végett :), igaz nekem a 2. megoldás szimpatikusabb, még egy megoldás jutott eszembe, de ez gyanúsan lassabb, mint a regiszter mentés, ha aktív a videó megszakítás, annak elejére egy ret-et tenni, és amikor lefut az első videó megszakítás, akkor visszakerülne a push af.
A Navy Seals azért nem működik, mert felülírja nullákkal az FFFE-FFFF címen az IRQ vektort. Ha valójában nem hasznos adatot tárol ott, akkor javítható lenne az IRQ cím beállításával az init rutin futása után.
Sidplay-jel műxik, nem tudom mi lehet a különbésg, egyelőre csak a kód relokálás jut eszembe, de az IRQ vektor felülírást az nem orvosolná.
Title: Re: SID lejátszó
Post by: geco on 2017.February.12. 09:36:38
megnéztem, úgy látom a int vector címmel direktben a sidplay nem csinál semmit.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.12. 11:19:43
még egy megoldás jutott eszembe, de ez gyanúsan lassabb, mint a regiszter mentés, ha aktív a videó megszakítás, annak elejére egy ret-et tenni, és amikor lefut az első videó megszakítás, akkor visszakerülne a push af.

Ennél valamivel egyszerűbb lenne átmenetileg letiltani a video megszakítást (a már meglevő OUT (B4h), 31h helyére OUT (B4h), 21h kerül), majd a lapozás helyreállítása után újra engedélyezni (OUT (B4h), 31h).

Rambo-01-ben a 3. byte végig 0 (volume-ot is tartalmazó byte)

Itt valamiért a 24-es regiszter mindig 0 a sid_dump kimenetében. Ugyanez történik a PSID-et Plus/4 emulátorban betöltve és futtatva, látszólag működik, de nem ír a $D418 címre. >D418 0F után már van hangja ("f d400 d41f 0" és utána "g 400" indítja újra):
[attachurl=1]

A Green Beret, Katakis, Navy Seals és Platoon esetében már sikerült javulást elérni.
Title: Re: SID lejátszó
Post by: geco on 2017.February.12. 11:58:33
Itt valamiért a 24-es regiszter mindig 0 a sid_dump kimenetében. Ugyanez történik a PSID-et Plus/4 emulátorban betöltve és futtatva, látszólag működik, de nem ír a $D418 címre. >D418 0F után már van hangja ("f d400 d41f 0" és utána "g 400" indítja újra):
Érdekes, mert sidplay is néha hallgat nagyokat egy ideig, és utána kezdődik a hangos lejátszás :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.12. 12:45:38
[attachurl=1]

- a hangerő regisztert az init rutin hívása előtt 0Fh értékre állítja 0 helyett
- a megszakítás kezelő és egyéb kód mindig a 0420h-043Fh területre kerül, de a PSID betöltése előtt EA20h-ra is, hogy lehessen megszakításból JMP $EA31-el visszatérni
- ha van play rutin cím, akkor a megszakítás vektort (FFFE-FFFF) az init hívása után újra beállítja
- 32-nél több zene egy PSID-ben nem eredményez hibát, de csak az első 32-t konvertálja (nem ideális megoldás, bár az első néhány után általában csak effektusok vannak)
Title: Re: SID lejátszó
Post by: geco on 2017.February.12. 19:37:41
(Attachment Link)

- a hangerő regisztert az init rutin hívása előtt 0Fh értékre állítja 0 helyett
- a megszakítás kezelő és egyéb kód mindig a 0420h-043Fh területre kerül, de a PSID betöltése előtt EA20h-ra is, hogy lehessen megszakításból JMP $EA31-el visszatérni
- ha van play rutin cím, akkor a megszakítás vektort (FFFE-FFFF) az init hívása után újra beállítja
- 32-nél több zene egy PSID-ben nem eredményez hibát, de csak az első 32-t konvertálja (nem ideális megoldás, bár az első néhány után általában csak effektusok vannak)
:smt041 :smt041 :smt041
Még nem próbáltam, a lista szép hosszú :) , mindjárt fordítom, jövő héten tesztelem.
Title: Re: SID lejátszó
Post by: geco on 2017.February.12. 19:46:40
Itt az új verzió:

Video megszakítás átkerült a file szegmensre, az osztó (szorzó) rutin 0000h címre generálva,  a push, pop-os adatfeldolgozás kész, és tettem bele egy kis raszter csíkot (16-17 képsort visz el a mozgatás, úgy, hogy közben jönnek a megszakítások), csak 50Hz-es lejátszás közben mozog, 3-assal kapcsolható be (természetesen csak 50Hz-es zenénél) ,és 4-essel ki, 1-es, 2-es maradt a 8bit DAC ki/be.
A raszternek van egy kis hiányossága, a CPU , és a lejátszási sebesség kitakarja, eredetileg azt akartam, hogy e kijelző mögött menjen, de sokat lassított volna, így maradt ez a megoldás, thekinthetjük fícsörnek is :D
Title: Re: SID lejátszó
Post by: geco on 2017.February.12. 20:29:42
És egy dolog, amiről megfeledkeztem, az 50Hz-nél gyorsabb szenéken a volume bar csak 50Hz-enként frissül.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.12. 21:05:02
Nagyon jó lett, ez már gyakorlatilag késznek tűnik. :)

az osztó (szorzó) rutin 0000h címre generálva

Itt valójában már nem kell az A regisztert a szorzóval inicializálni, lehet akár 0 is. De a pár byte és ciklus különbségnek nem sok jelentősége van.

Quote
A raszternek van egy kis hiányossága, a CPU , és a lejátszási sebesség kitakarja, eredetileg azt akartam, hogy e kijelző mögött menjen, de sokat lassított volna, így maradt ez a megoldás, thekinthetjük fícsörnek is :D

Megoldható lenne a szöveget attribútum vagy 4 színű pixel módban kiírva, de ha ez lényegesen bonyolultabb (például már nem EXOS hívásokkal történik a megjelenítése), akkor talán nem érné meg.

Találtam még egy kisebb hibát, ha új file választásakor (Esc) hiba történik, akkor lefagy a program, mert az EP logóhoz kilépő rutin már nincs az eredeti helyén (felülírták a hangminták).
Title: Re: SID lejátszó
Post by: geco on 2017.February.13. 08:52:20
Nagyon jó lett, ez már gyakorlatilag késznek tűnik. :)
Koszi, bar a nagy resze a te otleted, en csak megvalositottam, vagy beepitettem :)
Itt valójában már nem kell az A regisztert a szorzóval inicializálni, lehet akár 0 is. De a pár byte és ciklus különbségnek nem sok jelentősége van.
Ertem  :)

Megoldható lenne a szöveget attribútum vagy 4 színű pixel módban kiírva, de ha ez lényegesen bonyolultabb (például már nem EXOS hívásokkal történik a megjelenítése), akkor talán nem érné meg.
Ez igaz, attributum mod tan nem tenne sokkal bonyolultabba, kell egy karakterkiiro cucc, meg az attributumot kell feltolteni.
Találtam még egy kisebb hibát, ha új file választásakor (Esc) hiba történik, akkor lefagy a program, mert az EP logóhoz kilépő rutin már nincs az eredeti helyén (felülírták a hangminták).
Koszi, nekem meg az jutott eszembe, hogy a interrupt delete nem mukodik jol a 300 Hz eseten.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.13. 08:56:35
Ha kész van az egész, akkor írtok egy "user manual"-t? :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.February.13. 10:01:50
Ha kész van az egész, akkor írtok egy "user manual"-t? :oops:
Tervben van :)
A konvertálásról is? ( Ezt is gondoltam betenni )
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.13. 10:11:48
A konvertálásról is? ( Ezt is gondoltam betenni )
Igen, hogyan jutunk el onnan, onna, hogy a .SID letöltve, odáig, hogy szól az EP-n :-)
Title: Re: SID lejátszó
Post by: geco on 2017.February.13. 10:51:41
Igen, hogyan jutunk el onnan, onna, hogy a .SID letöltve, odáig, hogy szól az EP-n :-)
Már egyszerűen :) a siddumpnak, és sidconvnak köszönhetően :) De majd lesz leírás is.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.13. 11:42:56
Ha már konvertálás, készítettem Windowsos (x64) csomagot a sid_dump és sid_conv programokból:
* sidconv.7z (https://enterpriseforever.com/sound/sid-lejatszo/?action=dlattach;attach=17404)    (szerk.: burkológörbe emuláció javítva a sid_conv.cpp-ben)

A forráskódból is egyszerűen fordítható ezzel (https://www.dropbox.com/s/ex0zxz7e6bmcb9r/mingw_w64-x64.7z?dl=1) a fordítóval (vagy ezzel (https://www.dropbox.com/s/a336x3bs1p0gv3t/mingw_w64-x86.7z?dl=1) a 32 bites változatával), a compile.bat futtatásával.

Használat:

sid_dump.exe INFILE OUTFILE [LENGTH1 [LENGTH2...]]
sid_dump.exe INFILE OUTFILE [SONGLENGTHS FILENAME]


sid_conv.exe INFILE OUTFILE [INTFREQ [BLKSIZE]]

A sid_dump PSID file-t futtat minimális emulált 6502-es környezetben, és a kimenete egyszerű "nyers" formátum, ami a SID regiszterekbe írt értékeket tárolja 50 Hz-es (vagy egyéb frekvenciájú) megszakításonként. Az ilyen file megfelelő tömörítés után lejátszható a sid.com (lent) használatával, ha van SID kártya (azaz jelenleg csak emulátoron :)). A PSID -> RAW konvertálás egyébként a SIDPLAY (https://enterpriseforever.com/sound/sid-lejatszo/msg62106/#msg62106) programmal és a sidrecn.lua (https://enterpriseforever.com/sound/sid-lejatszo/?action=dlattach;attach=17301) scripttel is lehetséges, ha a sid_dump valamiért nem működik.

A formátum leírása: 16384 byte-os blokkokat használ, minden blokk a 25 írható SID regiszter 655 értékét tárolja, az első 655 byte a 0. regiszter, a következő 655 byte az 1. regiszter, és így tovább. Az utolsó 9 byte általában 0, az alábbiak kivételével:
- az utolsó blokkban 3FFE-3FFF pozíciónál a ténylegesen használt megszakítások száma található, ami kevesebb lehet 655-nél
- az első blokkban 3FFD-nél a megszakítás frekvencia - 50 Hz található (így 50-305 Hz tartomány lehetséges), 3FFB-3FFC-nél pedig a megszakítások közötti SID ciklusok pontos száma CIA időzítésnél (CIA számlálóba írt érték + 1). Video megszakításnál ez 0, és az alapértelmezés 312 * 63 (PAL 50 Hz) vagy 262 * 65 (NTSC 60 Hz). A sid.com csak a kerekített Hz értéket veszi figyelembe
A 3-as csatorna regiszter (PWM felső 4 bit) eredetileg nem használt 7. bitjének speciális funkciója van: azt jelzi, ha a burkológörbét újra kell indítani a GATE bit egy megszakítás ciklus alatti 1->0->1 átmenete miatt.

SID zenék például innen (http://www.hvsc.c64.org/#download) tölthetők le, példa konvertálásra (az epcompress csak a sid.com-os lejátszáshoz kell, a sid_conv.exe a tömörítetlen formátumot is elfogadja):

..\sidconv\sid_dump.exe MUSICIANS/T/Tel_Jeroen/Cybernoid_II.sid cybnoid2.raw DOCUMENTS/Songlengths.txt MUSICIANS/T/Tel_Jeroen/Cybernoid_II.sid

Name:           Cybernoid II
Author:         Jeroen Tel
Released:       1988 Hewson
Video standard: PAL
SID model:      MOS6581
IRQ frequency:  50.12 Hz
Done converting track 1: 17343 frames
IRQ frequency:  50.12 Hz
Done converting track 2: 451 frames

epcompress -raw -m0 -9 -blocksize 16384 -maxoffs 32768 cybnoid2.raw cybnoid2.raw

Compressing data
  100%


[attachurl=1]
[attachurl=2]
[attachurl=3]
[attachurl=4]
[attachurl=5]

A következő lépés a SIDBASIC.COM által támogatott és SID kártya nélkül is lejátszható formátum létrehozása, ami a sid_conv programmal lehetséges. Ennek a formátumnak a leírása:

- az elején 16 byte-os EXOS fejléc található: 00h, 4Fh, tömörített adat méret L, tömörített adat méret H, IRQ frekvencia L, IRQ frekvencia H, megszakítások száma (24 bit, az alsó 8 bit az első), 7 nem használt (mindig 0) byte
- az EXOS fejlécet követi a tömörített adat epcompress -raw -m2 -blocksize 8192 -maxoffs 16384 formátumban
- minden 8K-s blokk legfeljebb 682 megszakítás hosszúságú felvételt tartalmaz, csatornánként 4 konvertált "regiszterrel". Az adat szervezése a blokkon belül hasonló a RAW formátumhoz. Az utolsó blokk végén (1FFE-1FFF) 682 - a blokkban ténylegesen használt megszakítások száma található
- a 0. és 1. csatorna regiszter a 16 bites SID frekvencia, zaj hullámformánál 4 bittel jobbra léptetve
- a 2. regiszter a gyűrűmodulációt (7. bit), hullámformát (5-6. bit, 00=háromszög, 01=fűrész, 10=négyszög, 11=zaj), és az aktuális hangerőt (0-4. bit) tartalmazza. 0 hangerő esetén a hullámforma mindig négyszög
- a 3. regiszter a négyszögjel kitöltési tényezője (felső 8 bit), csak nem 0 hangerejű négyszögjelnél, egyébként 0

Példa konvertálásra:
..\sidconv\sid_conv.exe cybnoid2.raw cybnoid2.m64
Converting file...
  100%
Compressing data
  100%
Title: Re: SID lejátszó
Post by: geco on 2017.February.13. 13:42:49
Ha már konvertálás, készítettem Windowsos (x64) csomagot a sid_dump és sid_conv programokból:
:smt041
Ez egy kimerítő leírás :) , sokkal jobb, mint amit én összedobtam volna :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.13. 15:20:02
Kisebb javítás a burkológörbe emulációban (sid_conv.cpp), egyelőre még nem sokat teszteltem, hogy nem rontott-e el valamit az előző verzióhoz képest:

* sidconv.7z (https://enterpriseforever.com/sound/sid-lejatszo/?action=dlattach;attach=17404)

Szerk.: a Garfield-nél találtam különbséget, ha a sustain szint 0, akkor a régi verzió 0-ra lecsengés után újraindította a burkológörbét :oops:, az újabb javította ezt.

Ááá, szerintem pont jó így az IK miatt nem érdemes sztem belenyúlni, legalább 6 percet át lehet alakítani, és ugyi a SID_DUMPnak időtartamot is meg lehet adni :) Én még anno a LUA-val mentettem a 6:32-es hosszú IK-t :)

Úgy értettem, csak az IK-t konvertálni rosszabb minőségűre :), 15 bites frekvenciával, 5 bites PWM-el és 4 bites hangerővel (3 sor módosítás az snd_conv.cpp-ben) a teljes hosszúságú file mérete 38094 byte-ról 34704-re csökkent. Bár azt nem hasonlítottam össze, mennyivel lett rosszabb így a hang. Csak érdekességként próbálkoztam még M0 tömörítéssel, ez 37590 méretet eredményezett, ami még a kicsomagoló nagyobb memóriaigényét sem egyenlítené ki. Az -m2 -blocksize 4096 -maxoffs 8192 (2*4K puffer) 46078-ra növelte a file méretét, viszont így 8K extra hely lehetne a betöltésére. De nem igazán érné meg, mert nem csak a lejátszót kellene átalakítani, hanem az összes többi (eddig is működő) file is nagyobb lenne.
Title: Re: SID lejátszó
Post by: geco on 2017.February.13. 20:08:41
Úgy értettem, csak az IK-t konvertálni rosszabb minőségűre :), 15 bites frekvenciával, 5 bites PWM-el és 4 bites hangerővel (3 sor módosítás az snd_conv.cpp-ben) a teljes hosszúságú file mérete 38094 byte-ról 34704-re csökkent. Bár azt nem hasonlítottam össze, mennyivel lett rosszabb így a hang. Csak érdekességként próbálkoztam még M0 tömörítéssel, ez 37590 méretet eredményezett, ami még a kicsomagoló nagyobb memóriaigényét sem egyenlítené ki. Az -m2 -blocksize 4096 -maxoffs 8192 (2*4K puffer) 46078-ra növelte a file méretét, viszont így 8K extra hely lehetne a betöltésére. De nem igazán érné meg, mert nem csak a lejátszót kellene átalakítani, hanem az összes többi (eddig is működő) file is nagyobb lenne.
Ez egy érdekes teszt, azt gondoltam volna, hogy ezzel a butítással többet lehet nyerni, mondjuk a dupláját.
A tömörítési módot én is meg szoktam nézni ha valamilyen program a végső stádiumba került, és a végén az esetek többségében az LZ mellett döntök, igaz szinte mindig ez a legnagyobb :D ,kivéve kis fájloknál.
Ez a 4Ks puffer eszembe jutott nekem is, hogy nyerhetnénk vele 8k-t, de példa mutatja, hogy az a 8k el is ment a file növekedésével, igaz ez egy extra kivétel, de 2-4 K-s növekedés tuti lenne a többi fájlnál is, amik megy ugyi beférnek a mostani setupba is :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.13. 20:12:34
Elméletileg véglegesnek szánt verzió, ha nem találtok benne hibát, FILE menüből kilépés működik, a 300Hz-es interrupt törlés javítva, és sebesség kijelző attributum módú lett, úgy döntöttem, jobban tetszik így a mozgó raster, mintha mögötte menne. Ha nincs hiba, akkor csomagolom LZ-vel, kb 6K lesz, és az lesz a kész verzió.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.13. 20:31:44
Ez a 4Ks puffer eszembe jutott nekem is, hogy nyerhetnénk vele 8k-t, de példa mutatja, hogy az a 8k el is ment a file növekedésével, igaz ez egy extra kivétel, de 2-4 K-s növekedés tuti lenne a többi fájlnál is, amik megy ugyi beférnek a mostani setupba is :)

Mivel a teljes file nem férne el, csak az első 31.75K, a méretnövekedés valójában kisebb lenne, de valószínűleg így is csak kb. 10-11 százalékkal hosszabb részét lehetne betölteni, azaz a teljes méret 63.8 százaléka helyett 70.5-öt, ami még mindig nem igazán érné meg.

Még azzal próbálkoztam, hogy az azonos funkciójú regiszterek egymás után kerüljenek (csatorna:regiszter helyett regiszter:csatorna szerinti rendezés), de ez is csak 38094-ről 38030-ra csökkentette a méretét, ami nem jelentős.
Title: Re: SID lejátszó
Post by: geco on 2017.February.13. 20:42:26
Még azzal próbálkoztam, hogy az azonos funkciójú regiszterek egymás után kerüljenek (csatorna:regiszter helyett regiszter:csatorna szerinti rendezés), de ez is csak 38094-ről 38030-ra csökkentette a méretét, ami nem jelentős.
Úgy látszik, pont jók vagyunk így :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.13. 21:19:01
Ha nincs hiba, akkor csomagolom LZ-vel, kb 6K lesz, és az lesz a kész verzió.

Nekem 4967 byte lett (epcompress -m3 -noborderfx SIDBASIC.COM SIDBASIC.COM).
Title: Re: SID lejátszó
Post by: szipucsu on 2017.February.13. 22:09:14
SIDBASIC.COM
Hol vannak olyan fájlok, amiket ezzel lehet megnyitni és lejátszani?
Kicsit elmaradtam, nem tudtam nagyon olvasni a fórum minden részét...
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.13. 22:40:15
Kicsit elmaradtam, nem tudtam nagyon olvasni a fórum minden részét...

Itt (https://enterpriseforever.com/sound/sid-lejatszo/msg62207/#msg62207) van néhány a sid.7z-ben az "m64" alatt, bár ezek régebbi konvertáló programokkal készültek, azóta javítottam egy pár hibát.
Title: Re: SID lejátszó
Post by: geco on 2017.February.14. 08:37:41
Nekem 4967 byte lett (epcompress -m3 -noborderfx SIDBASIC.COM SIDBASIC.COM).
Bocs rosszul emlékeztem, és 1 K-val tévedtem fölfelé, én DTF-et használtam, és úgy terveztem, hogy raw-ként becsomagolom, és úgy csinálok egy 5-ös fejlécű fájlt a kicsomagoló rutinnal, nem is tudtam, hogy az epcompressel ezt egy lépésben is lehet, így még egyszerűbb, köszi.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.14. 10:58:02
nem is tudtam, hogy az epcompressel ezt egy lépésben is lehet, így még egyszerűbb, köszi.

5-ös és 6-os fejlécű (.com és .ext) file-t tud önkicsomagoló rutinnal tömöríteni, az előbbinél a tömörítetlen program 4 szegmens méretű is lehet, amit az EXOS egyébként nem tudna betölteni.
Title: Re: SID lejátszó
Post by: geco on 2017.February.14. 11:02:06
5-ös és 6-os fejlécű (.com és .ext) file-t tud önkicsomagoló rutinnal tömöríteni, az előbbinél a tömörítetlen program 4 szegmens méretű is lehet, amit az EXOS egyébként nem tudna betölteni.
Ez szép, most, hogy mondod, valami rémlik, hogy láttam, csak kipotyogott a rövid memóriámból :lol:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.14. 14:24:09
A sid_conv.cpp burkológörbe emulációjában találtam még hibát. :oops: A reSID forráskód alapján módosítva a Paperboy már nagyon hasonló a SID kártyás lejátszáshoz, hamarosan feltöltöm a javított verziót.

Szerk.: a javítás ezeknél eredményezett különbséget:

ln-03.m64
ln-06.m64
ln-07.m64
ln-08.m64
ln-10.m64
paperboy-01.m64
rambo-22.m64
rastan-02.m64


100 Hz-esre konvertált file, nem biztos, hogy észrevehetően jobb az eredeti 50 Hz-esnél:
[attachurl=1]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.14. 22:07:12
Javított sid_conv:
[attachurl=1]
A programnak most már van egy harmadik opcionális paramétere is:
 sid_conv INFILE OUTFILE [INTFREQ [BLKSIZE [NOADSRBUG]]]
Ha a NOADSRBUG nem 0, akkor a burkológörbe újraindításakor (a valódi géptől eltérően) nullázza a sebességet meghatározó 15 bites számlálót. Ettől jobb vagy rosszabb is lehet a konverzió, mindenesetre az M64 file méret átlagosan 8 százalékkal csökken, bár az IK esetében minimális a különbség. A 150 Hz-es Paperboy esetében jól hallható eltérés van a két változat között.
Az INTFREQ -2-re állításával kétszerezhető a burkológörbe emuláció frekvenciája, ami talán javítja a minőséget, de növeli a kimeneti file méretét.

Frissített SID file csomag, mindenből az aktuális verzióval:
[attachurl=2]

Az "m64", "raw" és "sid" könyvtárakban megtaláható az adott formátum lejátszásához szükséges program is. A "raw" kivételével érdemes 10 MHz-es Z80 sebességet beállítani a minőség javítására. Néhány file-t nem konvertáltam, vagy hibás:
- gpc.sid, myth.sid, robocop.sid: hangmintákat használnak
- expfist.sid: hibás hosszúságok a Songlengths.txt-ben
- ik.sid: a teljes hosszúságú konvertált file túl nagy lenne, a sid_conv.cpp új verziója a még lejátszható méretűre csonkítja
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.15. 13:20:25
Újabb sid_conv frissítés kisebb változtatásokkal:
- ADSR bug esetén a számláló csak 32767-ig számol, bár ez csak 1 ciklus eltérés
- fűrészjel kiválasztása tiltja a gyűrűmodulációt; mivel a kombinációnak valódi gépen nincs értelme, a gyakarlatban ilyen valószínűleg nem igazán fordul elő
- ha túl nagy lenne a kimeneti file (> 24336 byte), akkor automatikusan megkeresi azt a hosszúságot, ami még elfér; az IK például 4 próbálkozás után 24124 byte méretű lesz
Title: Re: SID lejátszó
Post by: geco on 2017.February.15. 13:24:00
- ha túl nagy lenne a kimeneti file (> 24336 byte), akkor automatikusan megkeresi azt a hosszúságot, ami még elfér; az IK például 4 próbálkozás után 24124 byte méretű lesz
Cool :smt041
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.15. 19:59:18
A sid.7z-t is cseréltem, most már van lejátszható ik.m64.

Szerk.: SIDBASIC snapshot 8 MHz-es konfiguráción RAMDISK-en 303K zenével:
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.February.16. 08:53:10
A sid.7z-t is cseréltem, most már van lejátszható ik.m64.

Szerk.: SIDBASIC snapshot 8 MHz-es konfiguráción RAMDISK-en 303K zenével:
(Attachment Link)
Ez szép, Endinek készült? :D
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.16. 09:00:44
Ha lesz majd kész, végleges csomag, akkor rakom majd a sok programos VHD-re is.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.16. 09:03:11
Ennek a lejátszónak hogyan lehet megfogalmazni a lényegét? SID hangminták vannak letárolva, abból dolgozik?
Title: Re: SID lejátszó
Post by: geco on 2017.February.16. 09:09:08
Ennek a lejátszónak hogyan lehet megfogalmazni a lényegét? SID hangminták vannak letárolva, abból dolgozik?
Igen.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.16. 11:05:58
A háromszögjelet, fűrészjelet és zajt táblázattal generálja, minden hangerő értékhez külön táblázatot használva, a négyszöget egyszerű aritmetikai műveletekkel (CP PW, SBC A,A, AND VOLUME), bár ez a valódi SID-hez képest invertált kimenetet eredményez.

Részletesebben:

Minden csatornán az oszcillátor egy 16 bites fázis akkumulátorra épül, amelyhez a beállított frekvencia hangminta megszakításonként hozzáadódik. A kimenetet a felső 8 bit alapján generálja. Valódi SID esetében a fázis 24 bites, és a felső 12 bitből állítja elő a kimenetet. Ezért a frekvenciát az alábbi módon konvertálni kell (N az eredeti SID frekvencia kód, N' a konvertált):

fSID = N * (985248.6 / 16777216)
fSIDBASIC = N' * (fSNDINT / 65536)
N' = N * (985248.6 / 16777216) / (fSNDINT / 65536) = N * 985248.6 / (fSNDINT * 256)

A 985248.6 a PAL C64 órajele Hz-ben (17734475 / 18). Tehát a 4 MHz-es gépen használt 10 kHz-es lejátszási frekvenciánál 0.38486 a szorzó a konvertálásnál, ezt a lejátszó a ténylegesen mért órajel alapján kiszámítja és beállítja. Gyorsabb gépen nagyobb a hangminta megszakítás frekvenciája, azaz jól hallhatóan javul a minőség, de csökken a frekvencia felbontása az egyre kisebb szorzó miatt. 25 kHz-nél (10 MHz-es Z80) még elfogadható a pontosság.

A következő lépés a fázis felső 8 bitjéből a hang előállítása, előbb azonban még az esetleges gyűrűmoduláció effektust kell emulálni. Ez a gyakorlatban a másik csatorna fázisának a felső (15.) bitjével való egyszerű XOR műveletet jelent. A négyszögjel kivételével a lejátszó a hullámformákat 256 méretű táblázatokból olvassa, ezekből 31 van az 5 bites hangerőhöz, összesen tehát 5D00h méretű hangminta táblázat (31 * háromszög, 31 * fűrész, 31 * zaj). Nulla hangerőnél a program a hullámformát négyszögjelre cseréli, így megtakarítható volt 768 byte.

Speciális eset még a zaj, ez a valódi SID-nél minden periódus alatt 16 mintát állít elő (azaz például 1 kHz-es frekvenciát beállítva a zajgenerátor órajele 16 kHz), és csak hosszú idő után ismétlődik a kimenete, mivel 23 bites polinom számlálót (LFSR) használ. Ezért egyszerű 256 méretű táblázattal nem lehet igazán jól emulálni. Zajnál a konvertáló program (sid_conv) a frekvenciát 4 bittel jobbra lépteti, így a normál hullámformákhoz képest 16 periódus után ismétlődik a kimenet, és egy alatt helyesen 16 zaj mintát állít elő. Az ismétlődést csökkenti valamennyire, hogy minden hangerő értéknél eltérő a zaj minta, ez például doboknál javítja a hangot.

A négyszögjelet nem táblázattal, hanem egyszerű aritmetikai műveletekkel generálja a lejátszó, ez még gyorsabb is, mint a táblázat (az A-ban a fázis felső 8 bitje található):
Code: ZiLOG Z80 Assembler
  1.         cp    PW
  2.         sbc   a, a
  3.         and   VOLUME
Azaz a perióduson belül a 8 bitesre konvertált kitöltési tényező (PW) elérése előtt logikai 1 a kimenet (az SBC A, A után 255), utána 0. Ez tulajdonképpen nem helyes, mert a valódi SID négyszögjel generátora invertált kimenetű, a PW előtt 0 és utána 1. De a különbség remélhetőleg nem probléma a gyakorlatban.

A 3 csatorna lejátszását megvalósító rutin így néz ki, az önmódosító kód miatt ez futás közben változik:
Code: ZiLOG Z80 Assembler
  1. .   0043  D9           EXX
  2. .   0044  01 64 08     LD    BC, 0864
  3. .   0047  EB           EX    DE, HL
  4. .   0048  09           ADD   HL, BC
  5. .   0049  EB           EX    DE, HL
  6. .   004A  7C           LD    A, H
  7. .   004B  E6 00        AND   00
  8. .   004D  AA           XOR   D
  9. .   004E  01 00 1F     LD    BC, 1F00
  10. .   0051  4F           LD    C, A
  11. .   0052  0A           LD    A, (BC)
  12. .   0053  D3 A8        OUT   (A8), A
  13. .   0055  01 61 06     LD    BC, 0661
  14. .   0058  FD 09        ADD   IY, BC
  15. .   005A  7A           LD    A, D
  16. .   005B  E6 00        AND   00
  17. .   005D  FD AC        XOR   IYH
  18. .   005F  01 00 16     LD    BC, 1600
  19. .   0062  4F           LD    C, A
  20. .   0063  0A           LD    A, (BC)
  21. .   0064  D3 AF        OUT   (AF), A
  22. .   0066  01 86 00     LD    BC, 0086
  23. .   0069  09           ADD   HL, BC
  24. .   006A  FD 7C        LD    A, IYH
  25. .   006C  E6 00        AND   00
  26. .   006E  AC           XOR   H
  27. .   006F  FE A0        CP    A0
  28. .   0071  9F           SBC   A, A
  29. .   0072  E6 22        AND   22
  30. .   0074  D3 AC        OUT   (AC), A
  31. .   0076  D9           EXX
Itt az első két csatornán a hullámforma éppen háromszög (az aufmonty.m64 eleje), a harmadikon pedig 62.5% kitöltési tényezőjű (A0h / 256) négyszög. Gyűrűmodulációnál az AND 00h-k helyére AND 80h kerül. DE' az első csatorna fázisa, IY a második, HL' pedig a harmadik.

A file formátum minden csatornán a következőket tárolja video megszakításonként (összesen 4 byte):
- 16 bites SID frekvencia, zajnál 4 bittel jobbra léptetve
- 1 bit gyűrűmoduláció
- 2 bit hullámforma (kombinált hullámformák nem támogatottak), 0 hangerőnél mindig négyszög
- 5 bit hangerő
- 8 bites négyszögjel kitöltési tényező (az eredeti 12 bites érték felső 8 bitje)

A burkológörbe generátor emulációját a konvertáló program valósítja meg, így a lejátszónak ezzel nem kell foglalkoznia. Ez egyébként 3 számlálóra épül:
- egy 15 bites, ~1 MHz-en futó számláló határozza meg a sebességet, ha az aktuális A/D/R érték és egy táblázat szerint elér egy bizonyos értéket, akkor újraindul és a következő számláló értéke frissülhet
- egy 5 bites számláló emulálja az exponenciális lecsengést, felfutásnál (ATTACK) nem használt, egyébként a kimenetet lineáris szegmensekre osztja (93/255 érték alatt felezi a sebességet, 54/255 alatt negyedeli, stb.)
- végül egy 8 bites számláló a tényleges burkológörbe kimenet, felfutásnál növekszik az értéke és 255 elérésekor lecsengés (DECAY) módra vált, lecsengésnél és elengedésnél 0-ig csökken, az előbbinél csak akkor, ha az értéke nem egyenlő a SUSTAIN 17-szeresével (00h, 11h, 22h, stb.)

A szűrőt és a SYNC effektust nem támogatja a sid_conv és a lejátszó.
Title: Re: SID lejátszó
Post by: geco on 2017.February.17. 14:53:55
Új verziójú SIDPlay V1.3 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17443), amelyben az envelope emuláció teljesen le lett cserélve a V1.2-höz képest (a hangerő érték 5 bites, 0-30), törtnént még pár kisebb javítás.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.18. 13:49:53
Igen, és amúgy is van kb 20% szabad CPU-nk :D , kipróbáltam 12,5 KHz-en, úgy már volt fagyi, gondolom olyan blokkoknál, aminek kicsomagolása tovább tartott.

50 Hz-es megszakításnál úgy látom, a 11364 Hz (DAVE frekvencia = 21) még működik, bár a mozgó raszter villog a képernyő felső részén, és a 150 Hz már bizonytalan lehet. Többet kellene tesztelni, előfordulhat, hogy csak több blokk lejátszása után vagy újraindításkor jelentkezik hiba (a kicsomagolás nem tudja elég gyorsan feltölteni a puffert). Különösen újraindításnál, mert az utolsó blokk rövidebb. Gyűrűmoduláció nélkül fordított változat (- 37 ciklus) talán működhetne 12.5 kHz-en is.
Title: Re: SID lejátszó
Post by: geco on 2017.February.18. 14:32:15
50 Hz-es megszakításnál úgy látom, a 11364 Hz (DAVE frekvencia = 21) még működik, bár a mozgó raszter villog a képernyő felső részén, és a 150 Hz már bizonytalan lehet. Többet kellene tesztelni, előfordulhat, hogy csak több blokk lejátszása után vagy újraindításkor jelentkezik hiba (a kicsomagolás nem tudja elég gyorsan feltölteni a puffert). Különösen újraindításnál, mert az utolsó blokk rövidebb. Gyűrűmoduláció nélkül fordított változat (- 37 ciklus) talán működhetne 12.5 kHz-en is.
Nem meléxem én pontosan min teszteltem a 12.5KHz-en kívül, hogy Dave frekvencia = 21, vagy 22-n, amin stabilan működött, szerintem a gyűrűmoduláció nélküli működhetne 12,5 KHz-en is, de érdemes lenne a ring modot eldobni a nagyobb sebesség miatt?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.18. 14:48:23
érdemes lenne a ring modot eldobni a nagyobb sebesség miatt?

Ha teljesen nem is, esetleg lehetne külön gyűrűmoduláció nélküli verzió (feltételes fordítással), sok zene nem használja az effektust. De nem biztos, hogy megérné ezért két változatot készíteni, turbós gépeken pedig már most is elég magas a frekvencia.
Title: Re: SID lejátszó
Post by: geco on 2017.February.18. 15:05:21
Ha teljesen nem is, esetleg lehetne külön gyűrűmoduláció nélküli verzió (feltételes fordítással), sok zene nem használja az effektust. De nem biztos, hogy megérné ezért két változatot készíteni, turbós gépeken pedig már most is elég magas a frekvencia.
Igen :) , és egész jól szól már 4 MHz-en is, lehet már 6-on is tuti, de 8-on 100%
Épp SID-eket konvertálok, sajnos 2 órája újra kellett kezdenem, sztem ma feltöltöm őket.
Title: Re: SID lejátszó
Post by: geco on 2017.February.18. 21:05:46
SIDBasic (https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=17478)

SIDBASIC legfrissebb verziója, ami egy szoftveres SID lejátszó, konvertált SID fájlok lejázszásáre Enterprise 128 gépen, hardveres bõvítés nem szükséges.
A szoftber EXOS kompatibilis, ha a gépe rendelkezik fájlkezelõ eszközzel ( lemezvezérlõ, SD kártya), akkor az M64 fájlok egy fájlkezelõbõl választhatók ki, a magnós konfiggal rendelkezõk tölthetik a magnóról a kiválasztott M64 fájlt.
A lejátszást 128KB-os gépen a lejátszás közbeni 8Kb-os blokkonként kicsomagolás teszi lehetõvé.
Megkötések: max betölthetõ M64 fájlméret 24320 bájt (5f00h), nincs SYNC, felül- , és aluláteresztõ szûrõ emuláció, SID digi effektek nem játszhatók le
Kombinált hullámformák nem muködnek megfeleloen, ilyenkor egyszeruen zaj > furész > háromszög > négyszög prioritással történik a konverzió, a valódi hardver ettol eltér.

Vezérlés:
1 - zene lejátszás Dave chipen
2 - zene lejátszás külsõ 8bites DAC kártyán ha van a géphez csatlakoztatva
3 - raster bar be (csak 50Hz-es sebességû zenéknél mûködik)
4 - raster bar ki
Esc - fájl választás

Hamarosan töltök fel M64 csomagot is, épp konverzió alatt áll :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.18. 21:47:05
Ha jól látom, ebben a verzióban még egy FILE hiba lett javítva a Shift+Fel használatakor?
Title: Re: SID lejátszó
Post by: geco on 2017.February.18. 22:18:51
Ha jól látom, ebben a verzióban még egy FILE hiba lett javítva a Shift+Fel használatakor?
Igen, amikor a FILE-t ellenőriztem, a SIDPlay miatt, akkor vettem észre, hogy azt a bájtot elfelejtettem lecserélni, amikor a legújabb FILE verzióhoz igazítottam. :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 00:01:14
Néhány M64 fájl mazsolázgatásra :ds_icon_cheesygrin:

M64 Part1 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17453)
M64 Part2 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17454)
M64 Part2 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17455)
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 00:07:57
És itt vannak a SID raw data-t tartalmazó csomagok:
A ténykedésem vége előtt 2-3 órával  jutott eszembe, hogy megcsinálhattam volna SID.COM-hoz is a fájlokat, igaz, akkor most se végeztem volna, lehet holnap megpróbálkozom vele.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.19. 14:44:08
Különböző lejátszók összehasonlítása (lehetett volna még más zene is, például gyűrűmodulációval, amit ez nem használ):
[attachurl=1]

ace26581: SIDPLAY.PRG, emulált 6581, "C64 kompatibilis" órajelek (Z80: 10 MHz, NICK: 891415 Hz, DAVE: 492624 Hz)
ace28580: SIDPLAY.PRG, emulált 8580, "C64 kompatibilis" órajelek (Z80: 10 MHz, NICK: 891415 Hz, DAVE: 492624 Hz)
ace2dave: SIDPLAY.PRG, DAVE hanggenerátorok, "C64 kompatibilis" NICK órajel, 10 MHz-es Z80
ace2_4M: SIDBASIC.COM, 4 MHz-es Z80
ace2_6M: SIDBASIC.COM, 6 MHz-es Z80
ace2_10M: SIDBASIC.COM, 10 MHz-es Z80
ace2_100: SIDBASIC.COM, 10 MHz-es Z80, 100 Hz-es burkológörbe
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 15:14:02
A 6581-as szól a legjobban, én nem nagyon hallottam különbséget a különböző SIDBASIC-es verziók között, viszont az ACE2 tuti használ filtereket, gondolom ez a nagy eltérés oka a SIDBASIC, és a "hardveres" lejátszás között,
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.19. 15:24:34
viszont az ACE2 tuti használ filtereket, gondolom ez a nagy eltérés oka a SIDBASIC, és a "hardveres" lejátszás között,

Valóban, olyan zenét kerestem, ahol jól hallható a különbség, tehát használ szűrőt is, PWM-et, stb. Bár ez sem tökéletes, nincs gyűrűmoduláció, a hullámformák közül is elsősorban csak a négyszögjelet használja, tehát érdemes lenne még egy másikból is hasonló csomagot készíteni.

A 4 és 10 MHz-es SIDBASIC közötti eltérés főleg a magas hangoknál érzékelhető, ezeknek a torzítását csökkenti a lejátszási frekvencia növelése.
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 15:31:49
Valóban, olyan zenét kerestem, ahol jól hallható a különbség, tehát használ szűrőt is, PWM-et, stb. Bár ez sem tökéletes, nincs gyűrűmoduláció, a hullámformák közül is elsősorban csak a négyszögjelet használja, tehát érdemes lenne még egy másikból is hasonló csomagot készíteni.

A 4 és 10 MHz-es SIDBASIC közötti eltérés főleg a magas hangoknál érzékelhető, ezeknek a torzítását csökkenti a lejátszási frekvencia növelése.
A Last Ninja2-nél emléxem tapasztaltam különbséget még az én bot fülemmel is a turbós lejátszásnál. Ha jól emléxem, akkor az Exploding Fist nem nagyon használ négyszögjelet :)
Az a tippem, hogy ha csak hullámforma megy a SID-en szűrők nélkül, az nem sokban tér el a SIDBasices lejátszástól fülre, most pl a kedvenc LN2 12-es tune-t hallgatom, hát majdnem pont olyan, mint emlékeimben :D
Lassan elkészülök a SID.COM-os fájlokkal is :)
Title: Re: SID lejátszó
Post by: endi on 2017.February.19. 15:57:40
specy128-ra nem akarjátok megírni ezt a sid lejátszót?
biztos nagy sikere lenne specy-s körökben :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 16:10:16
specy128-ra nem akarjátok megírni ezt a sid lejátszót?
biztos nagy sikere lenne specy-s körökben :)
Ilyenre nem lehetne megírni, csak 50Hz-es interrupt van, nem mehetne megszakításból a sample lejátszás, mellette ott van a memórialapozási hiányosság, egyszerre csak 48K-t  RAM-ból a gép, kivéve +3-on, az AY-nak csak 16 szintű a volume regisztere, és azt is macerásabb címezni, mint EP-n.
És mellette ott van a kicsomagolás is, aminek kellene az interruptból való lejátszás.
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 16:36:35
SID.COM-hoz zenék:
Part1 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17461)
Part2 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17462)
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 17:29:00
Még egy adalék, Brennan Niel M64 és SM0 (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17463) (SID.COM-hoz találtam ki ezt a kiterjesztést)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.19. 18:25:15
Némi butítással nem lenne lehetetlen a Spectrumos lejátszó, de a pufferelt kicsomagolás valószínűleg nem lenne megoldható, így a formátum átalakítása nélkül legfeljebb kb. 3 percet lehetne lejátszani. Mivel csak 50 Hz-es megszakítás van, a hangminta lejátszást a DTM-hez hasonlóan kellene megoldani, a főprogramban futna végtelen ciklusban, és csak a vezérlését végezné az IRQ rutin. Így azonban fontos a megszakítás kezelés időtartamát minimalizálni. A CPU órajele fix 3.547 MHz, ezért a bemeneti file már konvertált frekvencia értékeket tartalmazhatna.

A D/A kimenet bonyolultabb és lassabb mint EP-n, viszont a nem lineáris hangerő miatt a három 4 bites regiszter megfelelő kombinálásával (PC-s programmal optimalizált táblázatot használva) javítható a felbontás.

Probléma még a lapozás, 0000-3FFFh területen mindig ROM van, a 4000-7FFFh pedig lassú (video) RAM. A 3. lapon lehetne a bemeneti adat (lapozható), 8000-BFFFh területen pedig a kód és a hangminta táblázatok. De így csak 4 bites hangerő számára van hely, vagy a táblázatok egy része lassú RAM-ba kerülne az 1. lapon.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.19. 18:32:47
És ha jól tudom az 64K RAM amiben a videó RAM-ok vannak, az szintén mind lassú, ráadásul géptípusonként eltérő kiosztásban.
Title: Re: SID lejátszó
Post by: endi on 2017.February.19. 18:37:27
hát ha nem lenne olyan jó mint ep-n, akkor is lehet még jó... meg ügye "szenzáció" jellegű.
na persze ha teljesen lefoglalja a procit akkor biztos fanyalognának sokan. de akkor is érdekes lehetne.
Title: Re: SID lejátszó
Post by: endi on 2017.February.19. 18:38:05
amúgy valami nem akar egy snapshotot csinálni amiben van sok sid, meg a lejátszó, és csak rá kelljen klikkelni és hallgatni? :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.19. 18:44:48
na persze ha teljesen lefoglalja a procit akkor biztos fanyalognának sokan. de akkor is érdekes lehetne.

Spectrumon a digitális hang lejátszása általában teljesen lefoglalja a CPU-t, a nagy frekvenciájú megszakítás hiánya miatt. De valószínűleg többen fanyalognak a rossz minőség miatt mint azért, ha a CPU nem tölt elég időt csak várakozással. :)

amúgy valami nem akar egy snapshotot csinálni amiben van sok sid, meg a lejátszó, és csak rá kelljen klikkelni és hallgatni? :)

Itt (https://enterpriseforever.com/sound/sid-lejatszo/msg62312/#msg62312) található ilyen snapshot, ha nem is nagyon sok (36) zenével. Ebben még a bugos FILE verziót használja a SIDBASIC, de ez nem okoz különösebb problémát.
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 20:14:17
Némi butítással nem lenne lehetetlen a Spectrumos lejátszó, de a pufferelt kicsomagolás valószínűleg nem lenne megoldható, így a formátum átalakítása nélkül legfeljebb kb. 3 percet lehetne lejátszani. Mivel csak 50 Hz-es megszakítás van, a hangminta lejátszást a DTM-hez hasonlóan kellene megoldani, a főprogramban futna végtelen ciklusban, és csak a vezérlését végezné az IRQ rutin. Így azonban fontos a megszakítás kezelés időtartamát minimalizálni. A CPU órajele fix 3.547 MHz, ezért a bemeneti file már konvertált frekvencia értékeket tartalmazhatna.
És a  megszakításban végzett vezérlés is rontana a minőségen, a magasabb hangoknál nagyon hallhatóan, a régi sidbasic is ilyen volt, miután  megcsináltam a megszakításos verzióját, akkor vettem észre milyen sokat ront. Talán úgy lehetne javítani, de az megint lassít, ha nem a megszakításban futna a vezérlés, a megszakítás csak időmérésre lenne jó, hanem a digi lejátszó végén ugrana a vezérlésre pár utasítás erejéig, ha a vezérlés befejeződött egy frame-ben, akkor nem csinál semmit, itt meg nehéz lenne megoldani a pontos időzítést.
Title: Re: SID lejátszó
Post by: endi on 2017.February.19. 20:17:32
viszont specyn azt a hw envelope-t nem lehetne kihasználni?
amúgy sima specy hangzással is jó lehetne egy sid lejátszó...
esetleg ha a forrást odaadjátok nekik (pl wos fórumon), szerintem biztos lenne valaki aki fejlesztené...


az a snapshot nekem incompatible...
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 20:33:51
amúgy sima specy hangzással is jó lehetne egy sid lejátszó...
esetleg ha a forrást odaadjátok nekik (pl wos fórumon), szerintem biztos lenne valaki aki fejlesztené...
Itt az a probléma, hogy 48Kb-t lát csak a speccy, ami relokálásnál okoz problémát, meg C64-en a verem is lent van 200h-n ha jól tudom, meg a 0000-00ffh a gyors elérésű terület, amit minden program használ, ezeket is ki lehetne küszöbölni talán az emulációban való áthelyezéssel, viszont olyan sid, ami relokálás után 0000-3fffh-ra kerülne, nem menne. Ezek miatt nem csináltam meg Speccy-re már, pedig gondolkoztam rajta, CPC-re, és SAM Coupéra elkészült.
Odaadom szívesen bárkinek a forrást :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.19. 20:50:09
az a snapshot nekem incompatible...

Ezzel (https://github.com/istvan-v/ep128emu/releases/tag/2.0.11.1) az emulátor verzióval működik.
Title: Re: SID lejátszó
Post by: endi on 2017.February.19. 21:02:31
Ezzel (https://github.com/istvan-v/ep128emu/releases/tag/2.0.11.1) az emulátor verzióval működik.

ah már megint egy újabb???
én casual user vagyok, nem fogok folyton frissítgetni
:)
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 21:18:07
A D/A kimenet bonyolultabb és lassabb mint EP-n, viszont a nem lineáris hangerő miatt a három 4 bites regiszter megfelelő kombinálásával (PC-s programmal optimalizált táblázatot használva) javítható a felbontás.
Itt arra gondoltál, hogy a három csatorna kombinált hangerejét egyszerre kiírni a digi lejátszó rutin végén a három hangerő regiszterbe, ami átfut a konvertáló táblázaton?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.19. 21:48:15
Itt arra gondoltál, hogy a három csatorna kombinált hangerejét egyszerre kiírni a digi lejátszó rutin végén a három hangerő regiszterbe, ami átfut a konvertáló táblázaton?

Igen, de nem tudom, ez mennyire lenne használható a gyakorlatban. Az egyszerű 4 bites AY hangerő azonban nem lineáris, az emulátorban például ezt a táblázatot használom:
        0,   300,   447,   635,   925,  1351,  1851,  2991,
     3695,  5782,  7705,  9829, 12460, 15014, 18528, 21845
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 21:57:55
Igen, de nem tudom, ez mennyire lenne használható a gyakorlatban. Az egyszerű 4 bites AY hangerő azonban nem lineáris, az emulátorban például ezt a táblázatot használom:
       0,   300,   447,   635,   925,  1351,  1851,  2991,
     3695,  5782,  7705,  9829, 12460, 15014, 18528, 21845

Én még annyira se ;) , de ha van kedved még segíteni, akkor belefoghatunk.
Igen arra emlékeztem, hogy nem az, de esetleg egy próbát lehet tenni az EP-féle lejátszással is, ha az első variáció nem lenne jó.

Csináltam egy SIDBasic (https://www.youtube.com/watch?v=8UxG_sjeuyM&t=20s) videjót a jútyúbra :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.19. 22:15:23
Az jutott eszembe, hogy esetleg lehetne először azzal próbálkozni, hogy mind a három hangerőértéket ugyanabba a hangerő regiszterbe kiírni, ez lehetne a leggyorsabb. gyanúsan a legroszzabb minőségű (ilyen megoldást láttam a Wolfensteinben, az egycsatornás 8bites DA kártyánál, a COVOX-nál használták ezt a megoldást, ha jól emláxem)
Title: Re: SID lejátszó
Post by: szipucsu on 2017.February.19. 22:25:10
Csináltam egy SIDBasic (https://www.youtube.com/watch?v=8UxG_sjeuyM&t=20s) videjót a jútyúbra :)
Ez jó!
A key clicket érdemes lenne kikapcsolni a file választás idejére.
Title: Re: SID lejátszó
Post by: szipucsu on 2017.February.19. 22:33:03
Esetleg lehetne majd olyan irányba is folytatni ezt, hogy még több hullámforma legyen benne, és írni hozzá egy szerkesztőt, mint pl. a Rockdigi.
Közben hallgatom a Youtube-on a videót. Van pár dallam, ami nagyon jó és sajnálom, hogy olyan gyorsan jön a másik utána. :D
Title: Re: SID lejátszó
Post by: endi on 2017.February.20. 00:28:24
jó a videó, ezt már lehet mutogatni a c64-eseknek :)

amúgy ez most akkor ha jól értem teljesen digi. régen mintha a dave hangcsatornákat is használta volna, vagy rosszul emlékszem?
Title: Re: SID lejátszó
Post by: endi on 2017.February.20. 00:36:20
aha, hát itt van, 2012-es! ez elég 4szögjeles. viszont ezt át lehetne specy128-ra írni, nem?
https://www.youtube.com/watch?v=6CKt9noxA7s
Title: Re: SID lejátszó
Post by: geco on 2017.February.20. 08:36:45
jó a videó, ezt már lehet mutogatni a c64-eseknek :)

amúgy ez most akkor ha jól értem teljesen digi. régen mintha a dave hangcsatornákat is használta volna, vagy rosszul emlékszem?
Emlékeid nem csalnak :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.20. 08:39:15
aha, hát itt van, 2012-es! ez elég 4szögjeles. viszont ezt át lehetne specy128-ra írni, nem?
https://www.youtube.com/watch?v=6CKt9noxA7s
Ez az, aminek kell a 64K egyben, a kód relokálás, és a verem, meg az utasítások miatt gyors elérésű terület miatt az alsó szegmens, a SIDBasic más verziójára sokkal nagyobb az esély, gondolkoztam egy keveset, simán lehet használni az M64 fájlokat majd betöltésre, csak lejátszás előtt át kell dolgozni az adatokat.
Title: Re: SID lejátszó
Post by: geco on 2017.February.20. 08:42:13
Közben hallgatom a Youtube-on a videót. Van pár dallam, ami nagyon jó és sajnálom, hogy olyan gyorsan jön a másik utána. :D
Készítése közben én is így voltam :), az elején elhatároztam, hogy kb 2 perc egy, és utána jön a váltás, az idő múlásával egyre inkább lanyhult a szabály :D
A key clicket érdemes lenne kikapcsolni a file választás idejére.
Én spec szeretem, segít a pozícionálásban :)
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.20. 08:46:53
Csináltok majd az új lejátszókkal is youtube-os videót?
Érdekes lenne egy olyan is, ahol egy zene van a különböző lejátszókkal összehasonlítva.
Title: Re: SID lejátszó
Post by: endi on 2017.February.20. 09:12:49
érdekes lenne tech infókat is írni egy összehasonlító videóra, meg a simára is
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.20. 14:41:59
Közben hallgatom a Youtube-on a videót. Van pár dallam, ami nagyon jó és sajnálom, hogy olyan gyorsan jön a másik utána. :D

A videón hallható zenék többségét ez a snapshot (https://enterpriseforever.com/sound/sid-lejatszo/msg62312/#msg62312) is tartalmazza. :)
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.20. 16:37:02
jó a videó, ezt már lehet mutogatni a c64-eseknek :)
Egy ideje már jár körbe-körbe a fejemben a kérdés, hogy milyen reakciót remélsz belőlük kiváltani?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.20. 19:10:14
érdekes lenne tech infókat is írni egy összehasonlító videóra, meg a simára is

Itt (https://enterpriseforever.com/sound/sid-lejatszo/msg62318/#msg62318) lehet olvasni a hangminta lejátszás működéséről, a régebbi SIDBASIC/SIDBINT verzióhoz képest a lényegesebb különbségek:
- a hullámforma táblázatok mérete 512 helyett 256
- a zaj periódusideje ennek ellenére hosszabb, nincsenek ismétlődő minták a táblázatban
- 5 bites hangerő felbontás 4 helyett
- négyszögjel generálása aritmetikai műveletekkel, 8 bites PWM felbontás (régebben 7 bites volt)
- 4 MHz-es gépen a lejátszási frekvencia 7812.5 Hz-ről 10000 Hz-re növelve (a gyorsulást elsősorban a 8 bites táblázat címzés tette lehetővé), turbós gépeken egyenesen arányos a Z80 órajellel
- a tömörített bemeneti file-t nem csomagolja ki teljesen a lejátszás előtt, hanem csak 2*8K puffert használ. Ennek előnye és hátránya is van: 128K-s gépen hosszabb zenét lehet lejátszani, bár a bővített (pl. 640K vagy 1M) memóriának most nincs előnye, ilyen rendszeren a régi megoldás jobb lehetett. Nem kell megvárni az egész file kicsomagolását a lejátszás kezdete előtt, viszont valamivel nagyobb a CPU igény
Title: Re: SID lejátszó
Post by: endi on 2017.February.20. 19:16:45
Egy ideje már jár körbe-körbe a fejemben a kérdés, hogy milyen reakciót remélsz belőlük kiváltani?

hát mindenképpen érdekes technikai dolog, főleg egy olyan c64-esnek aki képben van a sid-el, hogy egy másik gépen lehet szimulálni, méghozzá nem egy mai brutál pc-n, hanem egy korabeli, hasonló teljesítményű gépen. ez minimum tök jó, tök érdekes :)
mi a kérdés? :)

pl érdekes lenne egy c64-en szimulálni az ep-s "epimgconv" konvertált raszterenként színezett képeit. 16 színnel, mindenféle villogtatással is csak valami béna eredményt adna :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.20. 19:30:38
pl érdekes lenne egy c64-en szimulálni az ep-s "epimgconv" konvertált raszterenként színezett képeit. 16 színnel, mindenféle villogtatással is csak valami béna eredményt adna :)

Nem feltétlenül lenne béna, ugyan a hardver csak 16 színt tud, az EP attribútum módjához hasonló megjelenítés lehetséges FLI használatával. A hardveres scrollozással pedig vízszintes "interlace" effektust lehet megvalósítani több színű módban, ilyet a NICK nem tud. Elsősorban a kevés szín a hátrány, de a képtől függ, hogy mennyire. Plus/4-es konvertáló programmal egyszerűen össze lehet hasonlítani, a p4fliconv (https://github.com/istvan-v/plus4emu/releases/tag/1.2.10) hasonló az EP-s változathoz. Itt 121 szín lehetséges (illetve bizonyos trükkökkel több is lehetne), de a színek telítettsége fix, ami még mindig hátrány a NICK 8x8x4 es RGB színeihez képest.
Title: Re: SID lejátszó
Post by: szipucsu on 2017.February.20. 19:43:42
Egy ideje már jár körbe-körbe a fejemben a kérdés, hogy milyen reakciót remélsz belőlük kiváltani?
"Hú, azt hittem, ilyet csak a C64 tud. Elvesztettük a hidegháborút!!! :smt010 :smt085 :smt086 :smt087 :smt088 :smt089 :smt090  "
Title: Re: SID lejátszó
Post by: endi on 2017.February.20. 20:18:41
"Hú, azt hittem, ilyet csak a C64 tud. Elvesztettük a hidegháborút!!! :smt010 :smt085 :smt086 :smt087 :smt088 :smt089 :smt090  "

eh...
semminek semmi értelme...?
Title: Re: SID lejátszó
Post by: geco on 2017.February.20. 20:29:40
Feltettem a Pouet (http://www.pouet.net/prod.php?which=68981)-re is, hátha valaki kedvet kap még megismerkedni az EP-vel :)
Title: Re: SID lejátszó
Post by: endi on 2017.February.20. 20:59:09
ez a buffer használat érdekes amúgy, ez már majdnem dma :)
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.20. 21:43:49
hát mindenképpen érdekes technikai dolog, főleg egy olyan c64-esnek aki képben van a sid-el, hogy egy másik gépen lehet szimulálni, méghozzá nem egy mai brutál pc-n, hanem egy korabeli, hasonló teljesítményű gépen. ez minimum tök jó, tök érdekes :)
mi a kérdés? :)

pl érdekes lenne egy c64-en szimulálni az ep-s "epimgconv" konvertált raszterenként színezett képeit. 16 színnel, mindenféle villogtatással is csak valami béna eredményt adna :)
Nos, ezt – másik géppel SID emulálás – több mint 25 éve megcsinálták már egy rokon masinán (+4), és az sem hatotta meg a C64 tábort. Nyilvánvalóan az ottani nyomor hangtechnikával és teljesítménnyel nehezítve nem igazán lehetett ezt a minőséget megközelíteni sem, de maga az elv és a korabeli megvalósítások nem jelentettek kisebb "áttörést". A dologgal itt is ugyanaz a probléma, mint Plus/4-en: a zenéléssel egy időben tudsz még valami érdekeset csinálni? És a válasz nagyjából ugyan az itt is, mint a pluszin: nem turbósított gépen nem sok mindent, vagy csak jelentősen visszavágott hangminőség mellett és/vagy halál kényelmetlenül programozva, de azt is csak akkor, ha szénné optimalizálod. Aztán ott van még az eredetiség kérdése. Biztosan a 64-es "levetett" zenéit akarnád használni, vagy a "platform büszkeséged" ennél egy kicsit nagyobb? Még mielőtt félreértenéd: az elért nagyszerű eredményt nem kérdőjelezem meg, és nyilván abba sem tudok érdemben beleszólni, hogy az EP-sek milyen irányt szeretnének maguknak választani.

A C64 grafikájának sem vagyok szakértője, de azért az utóbbi 10-15 évben ott is történt némi fejlődés. Mondjuk szín se több, se jobb nem lett mint volt. ;) Azonban jöttek ki új szoftveres grafikus módok, amik sprite rétegekkel manipulálnak, és elég meglepő eredményeket is lehet néha látni. Próbálj keresgélni SHFLI, SHIFLI, UFLI, NUFLI és MUCSU grafikákat. De jó témaválasztással és ügyes rajztechnikákkal a hagyományos módokban is jópofa grafikák születnek, nem csak innen-onnan konvertált képek. Meg esetleg érdemes megnézni a Blu-REU című demót.
Title: Re: SID lejátszó
Post by: Povi on 2017.February.21. 12:16:21
Én még annyira se ;) , de ha van kedved még segíteni, akkor belefoghatunk.
Igen arra emlékeztem, hogy nem az, de esetleg egy próbát lehet tenni az EP-féle lejátszással is, ha az első variáció nem lenne jó.

Csináltam egy SIDBasic (https://www.youtube.com/watch?v=8UxG_sjeuyM&t=20s) videjót a jútyúbra :)

ez marha jó!
nem gondoltam, hogy ilyen minőségben lehet emulálni a SID-et!

különösen tetszik a 23. perc környékén lévő zene, olyan mint egy reneszánsz tánczene. Melyik játékból van?

Lesz a lejátszónak játékba fordítható verziója? (és leírás hozzá?) :oops:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.21. 12:46:20
különösen tetszik a 23. perc környékén lévő zene, olyan mint egy reneszánsz tánczene.

Iron Lord?

Quote
Lesz a lejátszónak játékba fordítható verziója? (és leírás hozzá?) :oops:

Valószínűleg megoldható a játékba építhető verzió, bár a pufferelt lejátszásnál gyakorlatilag 50 Hz-es megszakításban kellene futnia a játéknak. Egyszerűbb játéknál talán még maradna elég CPU idő a frekvenciát 8 kHz-re csökkentve.

Plus/4-es konvertáló programmal egyszerűen össze lehet hasonlítani, a p4fliconv (https://github.com/istvan-v/plus4emu/releases/tag/1.2.10) hasonló az EP-s változathoz.

Az új verzióban hibásnak tűnik az előnézet, ezért hamarosan lesz 1.2.10.1. :oops:
Title: Re: SID lejátszó
Post by: Povi on 2017.February.21. 13:14:05
Valószínűleg megoldható a játékba építhető verzió, bár a pufferelt lejátszásnál gyakorlatilag 50 Hz-es megszakításban kellene futnia a játéknak. Egyszerűbb játéknál talán még maradna elég CPU idő a frekvenciát 8 kHz-re csökkentve.

Igazából nem is feltétlenül a játék közbenre gondoltam, hanem pl. az elejére, amikor csak pl. bill. figyelésre vár. Ott futhatna full minőségben is.
Title: Re: SID lejátszó
Post by: Povi on 2017.February.21. 13:15:49
Iron Lord?
Oké, most lebuktam, hogy csak belepörgettem a videóba, ott van a szám elején a kiválasztás a FILE menüből... :oops:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.21. 15:17:41
Ha már Iron Lord, erről is készítettem összehasonlítást:
[attachurl=1]    (emulált 8580, "raw" formátum, C64 kompatibilis órajel és IRQ frekvencia)
[attachurl=2]    (SIDBASIC 8 MHz-es konfiguráción)
Title: Re: SID lejátszó
Post by: Povi on 2017.February.21. 15:26:17
[- 4 MHz-es gépen a lejátszási frekvencia 7812.5 Hz-ről 10000 Hz-re növelve

Ez pontosan mit jelent? A 10kHz ebben az esetben mintavételezési frekvenciának számít?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.21. 15:30:17
Ez pontosan mit jelent? A 10kHz ebben az esetben mintavételezési frekvenciának számít?

Igen. Mintavételezési frekvencia = Z80 órajel / 400.
Title: Re: SID lejátszó
Post by: szipucsu on 2017.February.21. 19:50:51
eh...
semminek semmi értelme...?
Csak vicceltem ezzel. Persze, meg lehet mutatni C64-eseknek, miért ne?
Title: Re: SID lejátszó
Post by: balagesz on 2017.February.22. 22:12:14
Nos, ezt – másik géppel SID emulálás – több mint 25 éve megcsinálták már egy rokon masinán (+4), és az sem hatotta meg a C64 tábort.

Ehhez van egy sztorim... Anno még szakközépben volt egy osztálytársam, aki (nagyon nem szeretném megbántani, régen volt, úgyis elévült, stb...) - hogy is mondjam - ilyen "szemellenzős C64 fanatikus" típusú emberke volt akkoriban. Annyira, hogy szerinte az AMIGA hangcsipje a SID továbbfejlesztése, szóval ilyen "a C64 az alfa és az ómega" stílus. A helyszín az iskola valamelyik előadó terme, arra már nem emlékszem, hogy szám.tech óra vagy fakultáció, szakkör, vagy mi is volt, mindenesetre "kötetlenebb" volt a hangulat egy átlagos órához képest.

Akkor még plus/4-en tanították az alapokat, ilyen gépeken "folyt a munka" a teremben. Időben ekkor jelentek meg az első SID-et emuláló programok, amik még igen kezdetlegesek voltak, nem volt pl. burkológörbe-emuláció sem. (Addig szólt a hang, ameddig be volt kapcsolva. Rosszmájú megjegyzésem: néhány SID-es zenének kifejezetten jót tett... :) ) A teremben volt pár nagyobb tv is, az egyikre rákötöttük egy másik osztálytársammal az előttünk levő gépet, betöltöttünk rajta egy ilyen SID-emulátor programot egy C64-es zenével. A minőségre is figyeltünk: egy olyan emu volt az alany, amelyik kikapcsolta a képernyőt (a plus/4 CPU-ja jelentősen gyorsabb ilyenkor), "látványnak" a hang-regiszter értékét beleírogatta a keretszín-regiszterbe is, így az szép csíkokkal villogott lejátszás közben.

Amikor elindítottuk a zenét, olyat láttam, amit se előtte, se azóta: a C64-fan emberke felállt a székéről, nyitott szájjal bámulta a tv-t, mint aki nem hiszi el azt amit lát meg hall. :razz: Szó szerint előadta a "leesett az álla a döbbenettől" szituációt. Valószínűleg nem volt egyéb folytatása a történetnek, mert más nem maradt meg, de azt a látványt, ahogy bámulja a villogó képernyőt tátott szájjal, azt soha nem felejtem el. :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 08:34:26
:ds_icon_cheesygrin:
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 19:50:18
Első próba, itt minden csatorna külön volume regiszterre megy.
8000-bfffh is belassul ha lassú memória kerül a 3. lapra? Minden, ami a digi lejátszáshoz kell, a 2. lapon van, viszont ha lassú memória kerül a 3. lapra, akkor lassul a sebesség (01 03 07, 05-öst nem használom)
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 19:55:14
SIDBASIC (https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=17478)-ben a fájlhossz hiba javítva, és ROM verzió betéve, M64 fájlok modulként is tölthetők a ROM verzióval.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.23. 20:05:56
8000-bfffh is belassul ha lassú memória kerül a 3. lapra? Minden, ami a digi lejátszáshoz kell, a 2. lapon van, viszont ha lassú memória kerül a 3. lapra, akkor lassul a sebesség (01 03 07, 02-est nem használom)

Az I/O műveletek is okozhatnak lassulást, ha a 16 bites port cím páros, vagy ha memória címként értelmezve lassú memóriára mutatna.
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 20:09:06
Az I/O műveletek is okozhatnak lassulást, ha a 16 bites port cím páros, vagy ha memória címként értelmezve lassú memóriára mutatna.
tehát a sima ld bc,0ffffh az out előtt lassulást okoz ,mert a 3. szegmensre mutat, pedig nem is csinál ott semmit?
és ha kettéválasztom, tehát nem adom meg direktben, hanem mondjuk ld b,0ffh, ld c,b ?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.23. 20:13:34
tehát a sima ld bc,0ffffh az out előtt lassulást okoz ,mert a 3. szegmensre mutat, pedig nem is csinál ott semmit?
és ha kettéválasztom, tehát nem adom meg direktben, hanem mondjuk ld b,0ffh, ld c,b ?

Nem az LD a lassú, hanem az OUT, a 16 bites cím felső két bitje alapján is várakozást generál. Ennek ugyan nem sok értelme van, de valószínűleg így egyszerűbb/olcsóbb lehetett a hardver. :) Ez hasonló jelenség ahhoz, ahogy a DAVE az I/O címeket is "lapozza" a B0-B3h portok szerint, bár az EP hardvere csak az alsó 8 bitet használja, a Spectrum emulátor kártyánál ez problémát okozott.
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 20:15:54
Nem az LD a lassú, hanem az OUT, a 16 bites cím felső két bitje alapján is várakozást generál. Ennek ugyan nem sok értelme van, de valószínűleg így egyszerűbb/olcsóbb lehetett a hardver. :)
Értem, tehát ez a része szopacs :ds_icon_cheesygrin:
Önmódosító kódot át kell alakítani, hogy gyors RAM esetén lassabb kódot szúrjon be, lassú esetén meg gyorsabbat :lol:
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.23. 20:21:12
ep128emu-ban ez is emulálva van?
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 20:33:11
itt valamit nem értek a leírás alapján:
A szöveg szerint ha a port c000-ffff között van, akkor a késleltetés nem érvényes rá 128K-s gépen sem
The address of the port being accessed is placed on the data bus. If this is in the range 0x4000 to 0x7fff, the ULA treats this as an attempted access to contended memory and therefore introduces a delay. If the port being accessed is between 0xc000 and 0xffff, this effect does not apply, even on a 128K machine if a contended memory bank is paged into the range 0xc000 to 0xffff.

de a következő táblázat szerint meg mivel az alsó bit be van állítva, így kap egy 4 T-state-es büntit:
Code: [Select]
   High byte   |         |
    in 40 - 7F? | Low bit | Contention pattern  
    ------------+---------+-------------------
         No     |  Reset  | N:1, C:3
         No     |   Set   | N:4
        Yes     |  Reset  | C:1, C:3
        Yes     |   Set   | C:1, C:1, C:1, C:1

Bocs, eszerint se kap :lol:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.23. 20:33:43
ep128emu-ban ez is emulálva van?

Igen.
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 20:50:37
Akkor viszont ez hiba az emulációban, feltéve hogy nincs a különböző Spectrum változatok között eltérés. :oops:
Van, csak hogy jó legyen, nem tudom hogy ebben van-e, de a késleltetési értékekben igen.
Éééés, ez az oldal (http://scratchpad.wikia.com/wiki/Contended_IO) már azt mondja, hogy van késleltetés a c000-ffff port io-n is :D
a memóriára (http://scratchpad.wikia.com/wiki/Contended_memory) ezt találtam

Ez tutinak (http://www.zxdesign.info/portContention2.shtml) tűnik, de itt nincs 128K

És a WOS (http://www.worldofspectrum.org/faq/reference/48kreference.htm#IOContention) mondta azt, hogy még 128Ks gépen sincs késleltetés a c000-ffff portíráskor ha lassú memória van belapozva

Tuti az emulátor, ZXNET (http://faqwiki.zxnet.co.uk/wiki/Contended_I/O) is késleltetést mutat, vagy én értettem félre a WOS-t, vagy azok beszélnek mellé :D

Itt találtam pár ULA test (http://wizard.ae.krakow.pl/~jb/qaop/tests.html) programot
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 21:02:17
és a WOS fórumon (https://www.worldofspectrum.org/forums/discussion/comment/215386#Comment_215386) is írták, hogy rossz a wiki

Bocs az első félrevezető infóért, sajnos azt találtam meg először, és bocs a topic offolásáért is :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.23. 21:07:06
Ez a teszt program is jónak mutatja az emulációt:
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.February.23. 21:19:22
Ez a teszt program is jónak mutatja az emulációt:
Még egyszer bocs, a rossz linkbe futottam bele elsőre, azt gondoltam volna a WOS pontos.
Közben megcsináltam a gyors verziót, ugyanarra a volume regiszterre kiírni mindent , amiit el is lehet felejteni, roszz a minősége :lol:
Title: Re: SID lejátszó
Post by: endi on 2017.February.23. 21:38:34
Még egyszer bocs, a rossz linkbe futottam bele elsőre, azt gondoltam volna a WOS pontos.
Közben megcsináltam a gyors verziót, ugyanarra a volume regiszterre kiírni mindent , amiit el is lehet felejteni, roszz a minősége :lol:

nem semmi :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.24. 09:22:12
A sebességen még a hullámforma is változtat egy keveset, a négyszögjel 3 ciklussal gyorsabb a többinél.

Az I/O várakozás miatti lassulást esetleg el lehetne kerülni azzal, ha a megszakítás kezelő rutin egyszerűen gyors memóriát lapozna a 3. lapra visszatéréskor. Ezzel ugyan lassulna az 50 Hz-es megszakítás kezelése, de nem lenne "nyávogás" a contended I/O miatt.
Title: Re: SID lejátszó
Post by: geco on 2017.February.24. 10:40:08
A sebességen még a hullámforma is változtat egy keveset, a négyszögjel 3 ciklussal gyorsabb a többinél.

Az I/O várakozás miatti lassulást esetleg el lehetne kerülni azzal, ha a megszakítás kezelő rutin egyszerűen gyors memóriát lapozna a 3. lapra visszatéréskor. Ezzel ugyan lassulna az 50 Hz-es megszakítás kezelése, de nem lenne "nyávogás" a contended I/O miatt.
Húúú, ez nagyon jó ötlet, én sokkal macerásabbra gondoltam, van 3 NOP-unk (és még ez se pontos) az időzítés miatt, ezt cserélném le lassú memória esetén 2 NOP-ra, gyorsnál egy 18h,00h-ra, de ezt el is dobtam akkor, fixen belapozom majd akkor a 00h-s lapot a megszakítás végén, az elején meg az épp aktuálisat.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.24. 12:20:11
Próbálkozás táblázatos D/A konverzió megvalósítására:
Code: ZiLOG Z80 Assembler
  1. ; BC' = 0c0fdh
  2. ; DE' = 080ah
  3.         exx                             ;   4
  4.         ld      l, a                    ;   8
  5.         ld      h, high dacTable        ;  15
  6.         out     (c), d                  ;  27
  7.         inc     d                       ;  31
  8.         outi                            ;  47
  9.         inc     b                       ;  51
  10.         inc     h                       ;  55
  11.         out     (c), d                  ;  67
  12.         outd                            ;  83
  13.         inc     b                       ;  87
  14.         inc     h                       ;  91
  15.         out     (c), e                  ; 103
  16.         outi                            ; 119
  17.         inc     b                       ; 123
  18.         dec     d                       ; 127
  19.         exx                             ; 131
Ez feltételezi, hogy AY regisztert a C0FDh porton is lehet választani, ami nem biztos, hogy hordozható a különböző Spectrum változatok között. A sebesség lehetne jobb is, bár a kód többi részénél néhány ciklust meg lehet takarítani az OUT utasítások hiánya miatt, helyette egy átmeneti regiszterben kell összeadni a kimenetet (ami lehetne az IXL vagy IXH, vagy a D vagy E és az egyik csatorna fázis akkumulátora pedig DE helyett IX).

Probléma még a hullámforma miatti sebesség változás, ez nem tűnik egyszerűen megoldhatónak nagyobb/lassabb kód nélkül.

Gyűrűmoduláció effektus nem lesz?
Title: Re: SID lejátszó
Post by: geco on 2017.February.24. 13:08:23
Gyűrűmoduláció effektus nem lesz?
Egyelőre azt kiszedtem ideiglenesen, úgy gondoltam, ha lesz idő rá akkor lesz, ha nem, akkor nem :)
Title: Re: SID lejátszó
Post by: szipucsu on 2017.February.24. 13:27:11
Közben megcsináltam a gyors verziót, ugyanarra a volume regiszterre kiírni mindent
Ennek a snapshotnak mit kéne csinálnia? Nekem a ZX emu nyílik meg kiinduló állapotban és hangyák is vannak rajta, de más nem.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.24. 13:30:56
Ennek a snapshotnak mit kéne csinálnia? Nekem a ZX emu nyílik meg kiinduló állapotban és hangyák is vannak rajta, de más nem.
Ha vársz sokat, akkor elkezd cincogni :-)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.24. 14:05:02
Egyelőre azt kiszedtem ideiglenesen, úgy gondoltam, ha lesz idő rá akkor lesz, ha nem, akkor nem :)

Jelenleg valamivel gyorsabb 10 kHz-nél (az 50 Hz-es megszakítás miatti lassulást nem számítva), a D/A 153 ciklust fogyaszt, a táblázatos módszerrel 163 (131 + 8 + 16 + 8 ) lenne, illetve a regiszterek eltérő használatával (IX - DE csere) 147 + néhány ciklus lassulás az egyik csatornánál. A NOP utasítások futásideje kb. megegyezik a gyűrűmodulációval (36 / 37 ciklus). Még azt kellene megoldani, hogy a négyszögjel ne legyen gyorsabb a többi hullámformánál, mert attól is "nyávog" a hang. Esetleg a ciklust lezáró JP utasítás ugorhatna 4, 7, 10 vagy 13 ciklus várakozásra.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.24. 14:30:32
Nem tudom mennyi hasznot hajthatna jelen probléma esetében, de a változó kódhossz elmaszkolására esetleg lehetne olyan önmódosító kódot használni, ami egy állandó idejű hangregiszter programozással indul a portok írásával, és a következő minták változó idejű kiválasztásával folytatódik, módosítva a rutin elejét az újonnan kiszámoltak értékek alapján. Sajnos ez fáziskésést okoz a lejátszásban, és nem segít az esetleges időbeli átlapolódás kezelésében.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.24. 18:24:47
Próbálkozás táblázatos D/A konverzió megvalósítására:

Táblázat, egyelőre nem igazán jól optimalizálva:
[attachurl=1]

[attachthumb=2]
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.24. 20:48:14
Azok a kis kiugrások a jelszintben – jellemzően a amplitúdó váltás pillanatában – magához a regiszter íráshoz köthetőek, az írás közben előálló ideiglenes jelszintekhez, vagy valami máshoz?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.24. 21:15:52
Ideiglenes jelszintekhez, különösen mivel az írás meglehetősen lassú, 72 ciklus az első és a harmadik csatorna között. Egy keveset lehetne gyorsítani, de akkor vagy a kezdőcím számítása lenne lassabb, vagy a felbontás csökkenne. Akkor sem lenne ilyen probléma, ha a táblázat minden csatornán csak monoton növekvő szinteket tartalmazna, de ez is csökkentené a felbontást, tehát valamilyen többé-kevésbé optimális kompromisszumot kell találni. Vannak egyébként olyan konvertáló programok, amelyek ezt a jelenséget is kihasználják, de itt nehezebb lenne.

Kisebb kiugrásokat az interpoláció is eredményez az emulátor kimenetének 48 kHz-re konvertálásakor.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 09:48:07
Közben megcsináltam a gyors verziót, ugyanarra a volume regiszterre kiírni mindent , amiit el is lehet felejteni, roszz a minősége :lol:

Ez a megoldás magasabb frekvenciájú (> 20 kHz) lejátszásnál lenne használható, a 10 kHz még jól hallható.

Szerk.: még egy kisebb problémát találtam: előfordulhat, hogy olyan kódrészlet közben történik megszakítás, amit az módosít, ezért a visszatéréskor néha "véletlenszerű" utasítások futnak. Ez elkerülhető lenne azzal, ha a megszakítás csak a lejátszó ciklus végén található JP-t írná át. Viszont talán gyorsítani is lehetne a lejátszás vezérlésén: az önmódosító részeknél közvetlenül is lehetne írni a kódot átmeneti puffer és LDI-k használata helyett.
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 10:37:36
Van egy kis gubanc, elméletileg kész van minden módosítás, annyi, hogy a háromszög, zaj, és fűréz táblák csak 15 eleműek az EP-s 31-gyel szemben a "memóriahiány" miatt butítottam le, meg lehetne csinálni a 31-re, de akkor bukunk majd fél percet a zenéből, viszont az önmódosító kód itt, és az, hogy a sepccy megszakíása másképp működik, mint az EP-s okoz egy kis galibát, a program elszáll ha épp az önmódosító kód azon részén volt megszakítás, ahol utasítás méretváltozás történt, a csatolmány is elszáll kb 1 perc után.
Erre 3 ötletem volt:
1 próbáljuk úgy időzíteni a lejátszást, hogy mindig igyanoda kerüljön a megszakítás, kuka, mert szerintem lehetetlen.
2 csekkoljuk a megszakításban, hogy hová térne vissza, és a visszatérési érték alapján módosítsuk azt
3 betenni di-t és ei-t az önmódosító kódokhoz, ez jelentős lassulást eredményezne.

És most jutott eszembe  a 4. megoldás, ha megszakítás történt, akkor csak annyi történjen, hogy a digi lejátszó rutin végén lévő JP utasítást ápdételje, hogy  a megszakító rutinra ugorjon, majd ez befejezés előtt ápdételi újra a JP-t az eredeti értékre, és ugorjon a digi lejátszás elejére.

Egyelőre ez a legszimpatikusabb megoldás ,de lehet neked van jobb, mi a véleményed?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 10:40:51
Egyelőre ez a legszimpatikusabb megoldás ,de lehet neked van jobb, mi a véleményed?

Éppen a JP-s megoldást ajánlottam néhány perccel korábban, de a JP módosítására egyébként is szükség lehetne a sebesség szabályozása miatt.

Quote
3 betenni di-t és ei-t az önmódosító kódokhoz, ez jelentős lassulást eredményezne.

Valójában elég lenne csak egy DI/EI pár, és egy (nem módosított) utasítás idejére engedélyezni a megszakítást, bár az is 8 ciklus.
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 10:59:11
Éppen a JP-s megoldást ajánlottam néhány perccel korábban, de a JP módosítására egyébként is szükség lehetne a sebesség szabályozása miatt.
Bocs, amikor először olvastam azt a hozzászólásod, akkor még nem volt ott, utána meg már írtam, és a fórum nem jelzett, hogy eksön történt, lehet módosításnál nem jelez. :) A JP módosul is már, attól függően hány négyszögjel lejátszás van.
0 esetén egy NOP-bal bővül ki a lejátszás
1 esetén egy CP (HL)-lel
2 esetén egy NOP, INC BC-vel
3 esetén egy CP (HL), INC BC-vel
Valójában elég lenne csak egy DI/EI pár, és egy (nem módosított) utasítás idejére engedélyezni a megszakítást, bár az is 8 ciklus.
Ebben nem vagyok biztos a Speccy megszakításkezelése miatt, amikor letiltottam a megszakítást a volume regiszterek írásának idejére, akkor kb a megszakítások fele ugrott. :(

Akkor a jp módosítást fogom használni, a direkt önmódosító kódon gondolkoztam én is, viszont LDI-nként csak 2 t-stat-et nyernénk + 10-et az LD DE,xxxx elhagyása miatt, abban az esetben lenne ez jó, ha be tudnám tenni a waveform, és hangerő állító függvénybe.
Elméletileg be tudom ,csak kell 2 ex de,hl.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 11:09:02
Ebben nem vagyok biztos a Speccy megszakításkezelése miatt, amikor letiltottam a megszakítást a volume regiszterek írásának idejére, akkor kb a megszakítások fele ugrott. :(

Valóban, a Spectrum nem tárolja a megszakítás kérést, hanem csak rövid időre generálja, ami gyakorlatilag arra elég, hogy a leglassabb (DD/FD CB-s) utasítások közben ne vesszen el. :oops: Tehát marad a JP-s megoldás.

Még az 50 Hz-es megszakítás kezelésén lenne jó valahogyan gyorsítani, mert jól hallhatóan torzítja a hangot. :( És valószínűleg a dacTable is lehetne jobb.

[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 11:13:00
Még az 50 Hz-es megszakítás kezelésén lenne jó valahogyan gyorsítani, mert jól hallhatóan torzítja a hangot. :( És valószínűleg a dacTable is lehetne jobb.
Csinálom most a direkt módosító kódot, többet gyorsít, mint gondoltam, sajnos a torzítást nem fogjuk tudni elkerülni, de ha kész az 50Hz-es megszakításkezelés felteszem a forrást, tuti találsz rajta még gyorsítási lehetőséget :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 11:56:02
Itt a javított megszakításos és direkt ápdétes verzió, az eredetihez képest (mikor még nem volt hangformának megfelelő késleltetés állítás sem) egy picit lassult az 50Hz-es vezérlőrutin ,akkor picit több volt, mint 4 képsor, most 5.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 12:01:25
A forráskód régebbi verziónak tűnik. :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 12:15:10
A forráskód régebbi verziónak tűnik. :oops:
Jól tűnik :oops: , lecseréltem a csatolmányt.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 15:04:11
TZX változat, valamiért hibásan működik, egyelőre nem sikerült javítani.

Szerk.: a copydat rutinban inicializálatlan volt a D' regiszter.
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 21:13:31
TZX változat, valamiért hibásan működik, egyelőre nem sikerült javítani:

Szerk.: a copydat rutinban inicializálatlan volt a D' regiszter.
Az nem lehet, hogy rossz a loaderem? Vagy esetleg valami rendszerváltozó van az 5c00-5d00 területen?
Még nem próbáltam taposítani a cuccot, arra gondoltam, hogy amikor nagyjából véglegesnek tűnik ez a rész, akkor tesztelem a töltést, és ha az is jó, akkor taposítom.

Más, az EP-s SIDBasicben is előkerült két hiba az EP klubban, az egyik az LPT 313 sor volt, azt ott javítottam, a FILE-ban nem lett lecserélve a hosszú fájlnév ~ karaktere, ezeket javítom majd, és felmerült az igény, hogy a sebességet minden zene előtt tesztelje, még az bekerül.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 21:17:36
Ez már működik, bár a minőség továbbra sem túl jó (talán a táblázatos D/A miatt sem?):
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 21:20:44
Ez már működik, bár a minőség továbbra sem túl jó (talán a táblázatos D/A miatt sem?):
Szerintem nem a táblázatos D/A, nézz meg egy régebbi verziót ,ami külön regiszter írós, az se jobb szerintem, az 50Hz-es vezérlés torzít sokat szerintem, de ha gondolod, csinálok egy külön regiszter írós legfrissebb változatot is összehasonlításképp.
Mi volt a gond? az inicializálatlan D'?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 21:23:00
Mi volt a gond? az inicializálatlan D'?

Igen.

Az 50 Hz-es megszakításon ebben a verzióban sikerült egy keveset gyorsítani, illetve a lejátszáson is 1 ciklust (most 9991 Hz-es). A kód egy részét csak akkor frissíti, ha változik a hullámforma, de ez csak akkor éri meg, ha legfeljebb egy csatornán változik, tehát nem biztos, hogy jó ötlet. Bár az ~1000 ciklus futásidőhöz képest egyik irányban sem jelent nagy eltérést.
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 21:57:37
Igen.

Az 50 Hz-es megszakításon ebben a verzióban sikerült egy keveset gyorsítani, illetve a lejátszáson is 1 ciklust (most 9991 Hz-es). A kód egy részét csak akkor frissíti, ha változik a hullámforma, de ez csak akkor éri meg, ha legfeljebb egy csatornán változik, tehát nem biztos, hogy jó ötlet. Bár az ~1000 ciklus futásidőhöz képest egyik irányban sem jelent nagy eltérést.
Nagyon tetszik a módosítás, legfőképp a 4,7,10,13-as eltolás, sose jutott volna eszembe ez a megoldás, én a legkevesebb írás melletti megoldásban gondolkoztam, az eszembe se jutott, hogy esetleg meg lehetne oldani írás nélkül is (vagyis gondolkoztam, hogy lehetne-e, és úgy láttam nem, pedig de :D ) Az önmódosító kódban az LD BC,xxxx C írásának kihagyása is marha jó, úgyse használja a program semmire :lol:
A kódfrissítéses megoldás nekem is eszembe jutott, de amit én csináltam volna 4-12 T-State-tel hosszabb lett volna :D
A TZX generáló CPP-t te csináltad?
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 22:05:48
Úgy hallom a gyorsítás jó hatással lett a lejátszásra, kevésbé torzulnak el a magas hangok.
Amúgy amikor szóba került a spectrum változat, én ilyen minőségre nem gondoltam, azt hittem ettől rosszabb lesz.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 22:15:52
A TZX generáló CPP-t te csináltad?

Igen, ugyanezt használtam a Specball (https://enterpriseforever.com/jatekok/enterball/msg52463/#msg52463)-ban is, csak ott még volt tömörítés is.
Title: Re: SID lejátszó
Post by: endi on 2017.February.25. 22:24:33
Úgy hallom a gyorsítás jó hatással lett a lejátszásra, kevésbé torzulnak el a magas hangok.
Amúgy amikor szóba került a spectrum változat, én ilyen minőségre nem gondoltam, azt hittem ettől rosszabb lesz.

én sejtettem hogy jó lehet, 16 hangerő lépcső se rossz ám :)
amúgy a c64-nek hány bites a d/a-ja? én ott is valami 4 bitre emlékszem
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 22:24:48
Igen, ugyanezt használtam a Specball (https://enterpriseforever.com/jatekok/enterball/msg52463/#msg52463)-ban is, csak ott még volt tömörítés is.
Szép :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.25. 22:26:39
én sejtettem hogy jó lehet, 16 hangerő lépcső se rossz ám :)
amúgy a c64-nek hány bites a d/a-ja? én ott is valami 4 bitre emlékszem
Ja, nem a 16 hangerő lépcső miatt gondoltam, hanem az 50Hz-es vezérlő rutin miatti torzítás miatt, meg azt hittem, hogy a 10KHz-es lejátszás nem jön majd ki a mecerásabb AY portírás miatt.
Én is :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.25. 22:38:17
amúgy a c64-nek hány bites a d/a-ja? én ott is valami 4 bitre emlékszem

4 bites a hangerő és az ADSR regiszterek, de a DAC 12 bites, amit csak a fűrészjel használ ki. A háromszögjel felbontása 11 bit, a zaj 8 bites. A burkológörbe generátor kimenete 8 bites.
Title: Re: SID lejátszó
Post by: endi on 2017.February.25. 22:47:24
4 bites a hangerő és az ADSR regiszterek, de a DAC 12 bites, amit csak a fűrészjel használ ki. A háromszögjel felbontása 11 bit, a zaj 8 bites. A burkológörbe generátor kimenete 8 bites.

huh, ez hogy jött ki nekik? :D
érdekes...
na de ebből azért látszik hogy ezzel jó minőségű hangot lehet...
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.25. 22:57:01
huh, ez hogy jött ki nekik? :D
érdekes...
na de ebből azért látszik hogy ezzel jó minőségű hangot lehet...
Gondolom a szokásos módon. Bob Yannes először nagyjából kitalálta mit szeretne csinálni, aztán megkapta az áramkör (~tranzisztor) keretet, és ami belefért az maradt. Tudomásom szerint az eredeti elképzelése a csókának egy 32 csatornás szintetizátor volt. Azután elment megalapítani az Ensoniqot.
Title: Re: SID lejátszó
Post by: endi on 2017.February.25. 23:05:23
Gondolom a szokásos módon. Bob Yannes először nagyjából kitalálta mit szeretne csinálni, aztán megkapta az áramkör (~tranzisztor) keretet, és ami belefért az maradt. Tudomásom szerint az eredeti elképzelése a csókának egy 32 csatornás szintetizátor volt. Azután elment megalapítani az Ensoniqot.

azon gondolkodtam hogy most az ep-s sid szimuláció alapján fel lehet mérni hogy hány Mhz-s z80 tudná teljesen jól szimulálni a c64-et.
szóval hogy annak idején 3-4 z80-ból (ha akkor még nem tudtak mondjuk 16Mhz-set csináln) meg egy 16 bites D/A-ból brutál dolgokat ki lehetett volna hozni :)
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.February.26. 10:34:14
azon gondolkodtam hogy most az ep-s sid szimuláció alapján fel lehet mérni hogy hány Mhz-s z80 tudná teljesen jól szimulálni a c64-et.
Nemigen. A SID szimuláció nagyon sima így ügy, de még sehol sincs a szűrő. Abból is kell kettő, és a megvalósításához mindenképp kell tudni szorozni. Után jön még a képernyőszervezés esetleges eltérései a szimuláló gépen a Commodore-féle megoldástól, amiről futás közben elég nehéz eldönteni, hogy egy képernyő területre történő írást konvertálni kell a szimulátor saját formátumára vagy azt éppen változatlan formában kell tárolni, mert nem képként van az a memória használva. Van még képpont szintű finom görgetés, ami mindig a nagyobbik felbontásban működik. Többszínű karakteres mód, amiben eldöntheted, hogy az adott karakterben többszínű vagy nagy felbontású ábrázolást szeretnél. Ott van még az ECM karakteres mód, ahol 64-re van korlátozva a karakterkészlet, de a felső két bittel kiválaszthatod négy háttérszín valamelyikét. Emlékezzünk még meg a két attributum memóriáról, amiből az egyik rögzített helyen van, a másikat viszont némi megszorítással szabadon lehet mozgatni a memóriában. És akkor ott vannak a szprájtok és a VIC-II "hibáinak" sokasága, amit valós időben kellene szoftverből emulálni. Emlékeim szerint a Pentium II vagy III kezdett el az a szint lenni, amikor már többé-kevésbé épkézláb emulációt lehetett előadni, de architekturálisan az olyan rendszerek fényévekre vannak a Z80-tól.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.26. 11:28:58
Módosított D/A táblázat, talán jobb az eddiginél, de biztosan hangosabb: :)
[attachurl=1]

A táblázatot generáló program (ay_da_opt.cpp) több paramétert támogat, és a kimenet alapján egy "dac.raw" file-t is készít, ami a hullámforma összehasonlítására használható.

Esetleg érdemes lehetne még a lejátszót tömöríteni, bár ez csak néhány másodperccel rövidíti a betöltést.
Title: Re: SID lejátszó
Post by: endi on 2017.February.26. 12:24:27
Nemigen. A SID szimuláció nagyon sima így ügy, de még sehol sincs a szűrő. Abból is kell kettő, és a megvalósításához mindenképp kell tudni szorozni. Után jön még a képernyőszervezés esetleges eltérései a szimuláló gépen a Commodore-féle megoldástól, amiről futás közben elég nehéz eldönteni, hogy egy képernyő területre történő írást konvertálni kell a szimulátor saját formátumára vagy azt éppen változatlan formában kell tárolni, mert nem képként van az a memória használva. Van még képpont szintű finom görgetés, ami mindig a nagyobbik felbontásban működik. Többszínű karakteres mód, amiben eldöntheted, hogy az adott karakterben többszínű vagy nagy felbontású ábrázolást szeretnél. Ott van még az ECM karakteres mód, ahol 64-re van korlátozva a karakterkészlet, de a felső két bittel kiválaszthatod négy háttérszín valamelyikét. Emlékezzünk még meg a két attributum memóriáról, amiből az egyik rögzített helyen van, a másikat viszont némi megszorítással szabadon lehet mozgatni a memóriában. És akkor ott vannak a szprájtok és a VIC-II "hibáinak" sokasága, amit valós időben kellene szoftverből emulálni. Emlékeim szerint a Pentium II vagy III kezdett el az a szint lenni, amikor már többé-kevésbé épkézláb emulációt lehetett előadni, de architekturálisan az olyan rendszerek fényévekre vannak a Z80-tól.

bocs, rosszul fogalmaztam, csak konkrétan a sid-re gondoltam most.
viszonylag olcsón ki lehetett volna hozni egy jó szintit, új proci tervezése nélkül, simán z80-ra alapulva, na persze jó szoftverrel
Title: Re: SID lejátszó
Post by: endi on 2017.February.26. 14:35:34
pl ha a specy (vagy akár a zx81!) kapott volna 1 darab szerencsétlen D/A-t (még 4 bites is elég lett volna), akkor már ezeken a gépeken elindult volna a "mod zene" korszak. na jó, zx81-en az 1Kb memória miatt nem nagyon, de 48k-val már simán. :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.26. 15:29:39
Még egy keveset sikerült gyorsítani az 50 Hz-es megszakításon (szerk.: bugos a lejátszás végén, még javítani kell :oops:):
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.February.26. 16:08:06
Esetleg érdemes lehetne még a lejátszót tömöríteni, bár ez csak néhány másodperccel rövidíti a betöltést.
PGyuri említette, hogy a Spectrumosok nem szeretik, annál jobb egy program ,minél nagyobb :D , épp azon gondolkozom ,hogy feltöltöm pár KB-tnyi random adattal :ds_icon_cheesygrin:
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.February.26. 16:35:30
épp azon gondolkozom ,hogy feltöltöm pár KB-tnyi random adattal :ds_icon_cheesygrin:
Ez gyári programokban is előfordul! :-)
Title: Re: SID lejátszó
Post by: geco on 2017.February.26. 16:44:28
Megvan a hiba, az utolsó szegmensre nem kerül fel az átalakított hossz adat.
Title: Re: SID lejátszó
Post by: geco on 2017.February.26. 18:04:28
Elméletileg hibamentes, csináltam pár TZX-et, csak a zenéket tartalmazzák.
Használat, SIDBasic.tzx az ASTERIX.M64-et tartalmazza, azt automatikusan be is tölti, space billentyű sorából bármely billentyűt lenyomva tölthetjük a következő TZX-et, ilyenkor elfeketedik a képernyő, ha hibás töltés volt, akkor csíkoz a képernyő, billentyűre vár, billentyű lenyomása után tölthető a következő fájl.
Title: Re: SID lejátszó
Post by: endi on 2017.February.26. 19:11:26
kiraktam a videókat wos-ra mert nem bírtam ki hogy ne :)
https://www.worldofspectrum.org/forums/discussion/54160/c64-sid-player-coming-soon-to-specy-128#latest
Title: Re: SID lejátszó
Post by: geco on 2017.February.26. 19:32:35
kiraktam a videókat wos-ra mert nem bírtam ki hogy ne :)
:lol:
Azért van egy enyhe túlzás a nearly all capabilities-ben :D
Title: Re: SID lejátszó
Post by: endi on 2017.February.26. 20:15:55
:lol:
Azért van egy enyhe túlzás a nearly all capabilities-ben :D

ugyan, a laikusoknak hidd el simán jó ez

sőt amúgy a régi négyszögjeles verzió is tök jó szerintem, gondolom az kevés proci időt visz (meg kevés memóriát) szóval akár demókban, játékokban is használhatók sid-ek specy-n

szerintem ha kirakod a forrást tuti hogy specy48-ra is megcsinálják, 1 bites kimenettel :D és még akár jó is lehet, ismerve a 48-as zenéket
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.26. 20:36:46
PGyuri említette, hogy a Spectrumosok nem szeretik, annál jobb egy program ,minél nagyobb :D , épp azon gondolkozom ,hogy feltöltöm pár KB-tnyi random adattal

Ha a zene 2:43-nál hosszabb, akkor az M64 lejátszhatatlan része miatt már van véletlenszerű(nek tűnő) extra adat. :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.26. 20:42:01
Ha a zene 2:43-nál hosszabb, akkor az M64 lejátszhatatlan része miatt már van véletlenszerű(nek tűnő) extra adat. :)
Megint elszúrtam valamit? Amikkel teszteltem, azoknál jó volt a váltás.
Title: Re: SID lejátszó
Post by: geco on 2017.February.26. 20:46:19
Elméletileg kész a javított változat, az LPT 312 soros, a hosszú fájlnévben cseréli a ~-ot ?-re, és minden betöltés után teszteli a CPU sebességét.
Teszteljétek ti is, ha van hiba, jöjjön elő, én fél órát teszteltem most.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.26. 20:49:31
Megint elszúrtam valamit? Amikkel teszteltem, azoknál jó volt a váltás.

Nem úgy értettem, hogy hibás a lejátszó, csak van kihasználatlan adat a M64-ekben (amitől a Spectrumosok szerint jobb a program :)) az első 12 blokk után.
Title: Re: SID lejátszó
Post by: geco on 2017.February.26. 20:57:12
Nem úgy értettem, hogy hibás a lejátszó, csak van kihasználatlan adat a M64-ekben (amitől a Spectrumosok szerint jobb a program :)) az első 12 blokk után.
Már megijedtem :lol: , jót röhögtem ,amikor PGyuri előadta ezt a történetet :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.27. 13:24:10
Lua script az itt (https://enterpriseforever.com/sound/sid-lejatszo/msg62538/#msg62538) található lejátszó vezérléséhez, ezzel tesztelhető, milyen lenne a hang az 50 Hz-es megszakítás sokkal gyorsabb kezelésével:
[attachurl=1]

A 7-es AY regisztert 38h helyett 3Fh értékre állítja, így elvileg folyamatosan magas szintű a csatornák kimenete, de ezt tesztelni kellene más emulátorokon is.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.27. 15:25:46
Az 50 Hz-es megszakításon egyébként még lehetne tovább gyorsítani, bár a konvertálás betöltés után lassulna: a hullámforma/hangerő byte tartalmazhatna már konvertált értéket. Táblázatos hullámformáknál:

b7 = RM
b6 = 0
b0..b5 = táblázat cím b8..b13

Négyszögjelnél:

b7 = RM
b6 = 1
b1..b5 = hangerő
b0 = 0

Ez minimalizálná a v1regs rutint, esetleg (a kód méretének növekedése árán) minden csatornához külön meg lehetne írni, például így:
Code: ZiLOG Z80 Assembler
  1.         pop     bc
  2.         ld      a,c             ;B = pw
  3.         and     80h             ;ring mod3
  4.         ld      (sidSynth.l2+1),a
  5.         xor     c
  6.         sub     40h
  7.         jr      c,v1wtbl
  8.         ld      c,0feh          ;CP nn
  9.         ld      hl,0e69fh       ;SBC A,A : AND nn
  10.         jp      v1wrt
  11. v1wtbl  and     0bfh
  12.         ld      c,01h           ;LD BC,nnnn
  13.         ld      l,a
  14.         ld      h,4fh           ;LD C,A
  15.         ld      a,0ah           ;LD A,(BC)
  16. v1wrt   ld      (sidSynth.l3),bc
  17.         ld      (sidSynth.l3+2),hl
  18.         ld      (sidSynth.l3+4),a

Talán a dacTable is tovább javítható, de elsősorban az 50 Hz-es megszakítás rontja a minőséget.
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 15:45:10
Az 50 Hz-es megszakításon egyébként még lehetne tovább gyorsítani, bár a konvertálás betöltés után lassulna: a hullámforma/hangerő byte tartalmazhatna már konvertált értéket. Táblázatos hullámformáknál:
Ezzel sztem sokat nyerhetnénk, nagyon jó ötlet.
Ez minimalizálná a v1regs rutint, esetleg (a kód méretének növekedése árán) minden csatornához külön meg lehetne írni
Erre gondoltam én is, igaz nem erre a direkt önmódosító kódosra, hanem az eredetit bemásolva mindenhová
Szerintem megpróbálom megcsinálni mind a kettőt, hátha lesz hallható javulás :)

Talán a dacTable is tovább javítható, de elsősorban az 50 Hz-es megszakítás rontja a minőséget.
tutter a megszakítás a főkolompos :)

a 7-es regiszterbe 3fh írása javít a minőségen?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.27. 15:48:59
Ezzel sztem sokat nyerhetnénk, nagyon jó ötlet.Erre gondoltam én is, igaz nem erre a direkt önmódosító kódosra, hanem az eredetit bemásolva mindenhová

A fenti kódrészlet csak példa, nem feltétlenül optimális megoldás.

Quote
a 7-es regiszterbe 3fh írása javít a minőségen?

Ezt egyelőre nem tudtam összehasonlítani, de hangosabb. :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 16:00:50
A fenti kódrészlet csak példa, nem feltétlenül optimális megoldás.
Ahogy számolgatok, talán picit gyorsabb az LD (HL),xx, INC L .
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.27. 19:15:53
Jónak tűnik még Hikaru ötlete is a WOS fórumról, megszakítás helyett egy számláló használata. Erre a célra használható lehetne a még szabad E regiszter, vagy (valamivel nagyobb átalakítás után) a B. 10 kHz-es lejátszási frekvenciánál 200-ról kellene számolni 0-ig (illetve kb. 197-198 figyelembe venné az 1-1.5% lassulást is), tehát 8 bites regiszter megfelelő erre a célra. Viszont a sidSynth lassulna (DEC E = +4 ciklus, DJNZ = +3 ciklus), bár a dacTable B800h-ra helyezésével megtakarítható lenne egy LD A,8, helyette OUT (C),H választhatná a 8. AY regisztert.

A számláló a vezérlés több részre osztása (150 Hz és egyszerre csak egy csatorna) nélkül is gyorsabb lenne a megszakításnál, és a frekvencia sem lenne fix. Ezen kívül még megtakarítaná az IM 2-es táblázatot.

videoIRQ tiltása = -57 ciklus
EI törlése = -4 ciklus
jumpvl egyszerűbb módosítása = -10 ciklus
számláló újratöltése = +7 ciklus

Tehát 64 ciklus gyorsulás.
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 19:43:35
Jónak tűnik még Hikaru ötlete is a WOS fórumról, megszakítás helyett egy számláló használata. Erre a célra használható lehetne a még szabad E regiszter, vagy (valamivel nagyobb átalakítás után) a B. 10 kHz-es lejátszási frekvenciánál 200-ról kellene számolni 0-ig (illetve kb. 197-198 figyelembe venné az 1-1.5% lassulást is), tehát 8 bites regiszter megfelelő erre a célra. Viszont a sidSynth lassulna (DEC E = +4 ciklus, DJNZ = +3 ciklus), bár a dacTable B800h-ra helyezésével megtakarítható lenne egy LD A,8, helyette OUT (C),H választhatná a 8. AY regisztert.

A számláló a vezérlés több részre osztása (150 Hz és egyszerre csak egy csatorna) nélkül is gyorsabb lenne a megszakításnál, és a frekvencia sem lenne fix. Ezen kívül még megtakarítaná az IM 2-es táblázatot.

videoIRQ tiltása = -57 ciklus
EI törlése = -4 ciklus
jumpvl egyszerűbb módosítása = -10 ciklus
számláló újratöltése = +7 ciklus

Tehát 64 ciklus gyorsulás.
Basszus, ha nem mondod Hikarut, akkor észre se veszem, 5 előtt olvastam, amit írt, csak a spoilert nem vettem észre.
Módosítom majd eszerint, előbb megcsinálom a délelőtti javaslatod, ha az sikerült, akkor nekiesek ennek.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.27. 19:54:27
A D/A résznél valójában mindegyik csatornát lehetne OUT (C),H utasításokkal választani az INC H-k miatt (B8h, B9h, BAh), ha a dacTable B800h kezdőcímre kerül. Így felszabadul a DE' regiszter, ami még hasznos lehet.
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 20:04:34
A D/A résznél valójában mindegyik csatornát lehetne OUT (C),H utasításokkal választani az INC H-k miatt (B8h, B9h, BAh), ha a dacTable B800h kezdőcímre kerül. Így felszabadul a DE' regiszter, ami még hasznos lehet.
Értem, fasza ötlet :), már át is tettem pár dolgot 4200h-ra előkészítve a b800h-ra tételt :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.27. 20:20:21
Az IM 2-es megszakítás hiánya megtakarít 257 byte-ot (illetve valamivel kevesebbet, mert a delaytbl felülírja az elejét), tehát valójában több a szabad hely, eseleg a dacTable elé is kerülhetne kód a lassú video szegmens helyett.

Szerk.: a Spectrumosoknak nem tetszik a turbósított magnó betöltő rutin, ezért annak a törlésével is szabadulhatna fel valamennyi hely. :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 20:44:41
Az IM 2-es megszakítás hiánya megtakarít 257 byte-ot (illetve valamivel kevesebbet, mert a delaytbl felülírja az elejét), tehát valójában több a szabad hely, eseleg a dacTable elé is kerülhetne kód a lassú video szegmens helyett.
Igen, azt is beleszámítottam :) Azt akarom elérni, hogy az 5d00h töltési hossz megmaradjon :)
Szerk.: a Spectrumosoknak nem tetszik a turbósított magnó betöltő rutin, ezért annak a törlésével is szabadulhatna fel valamennyi hely. :)
Én csak egy ilyen hozzászólást láttam, pedig jó gyors lett a töltés, egyelőre én benthagyom, de látod, a speccysek másként gondolkoznak, nem szeretik a tömörített programot, és a gyorstöltőt se :D
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 21:01:50
Úgy tűnik a módosításoknak köszönhetően az 5 raszter sorról lementünk 3-ra, és lehet csak bebeszélem, de mintha hallható is lenne a javulás.
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 21:27:10
Tényleg a TAP-ot akarják, szerintem legalább a lejátszóból lesz turbósított is.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.27. 21:37:22
Úgy tűnik a módosításoknak köszönhetően az 5 raszter sorról lementünk 3-ra, és lehet csak bebeszélem, de mintha hallható is lenne a javulás.

Ha jól számolom, kb. 140 ciklust gyorsult, és még tovább lehet javítani a számlálós megoldással.
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 21:39:11
Ha jól számolom, kb. 140 ciklust gyorsult, és még tovább lehet javítani a számlálós megoldással.
Az jön most, vagyis elkezdem :), de lehet csak szerdán fejezem be .
A ciklusos megoldásnak köszönhetően az SP-t se kell menteni sehol, ez gyorsít 60 ciklust,  a DE lett az IX helyett a számlálója, hogy hány csatornán van négyszögjel, így felszabadult a PUSH , POP IX, és igaz, csak 7 ciklus gyorulás, de észrevettem ,hogy a 7dh portra 00h-t írok, és rögtön mögötte van az IN A,(0FEh), így töröltem az LD A,7Fh-t. A teszt van hátra, és a szétbontás, de ez okozhat egy kis lassulást, mert a DE' regisztert kellene használni, plusz még vezérelni, hogy mikor hová ugorjunk, lehet mégse éri meg?
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 22:43:10
Vagy mi lenne, ha a vezérlő rutinból hívnánk meg 3x vagy akár többször JP-vel, és DE'-ben lenne a visszatérési cím?
Title: Re: SID lejátszó
Post by: endi on 2017.February.27. 22:49:59
akkor ep-n is gyorsabb lenne interrupt nélkül, nem?
persze nem lenne elég kompatibilis :) haha ez lassítja a pc-ket is :)
Title: Re: SID lejátszó
Post by: geco on 2017.February.27. 23:59:00
akkor ep-n is gyorsabb lenne interrupt nélkül, nem?
persze nem lenne elég kompatibilis :) haha ez lassítja a pc-ket is :)
gyorsabb lenne, viszont nem menne az on the fly kicsomagolas, amúgy meg interrupttal is menne 11 khz-en.
Title: Re: SID lejátszó
Post by: geco on 2017.February.28. 00:04:03
megalmodtam a tutit, az összes variaciora legeneraljuk előre a digi lejátszó ciklust,nem bontjuk szét a vezerlest, mivel megúsztuk az önmódosító kódot, és oda update-eljuk be az értékeket, amit majd később meg is hívunk a következő vezerlesig. Ja és így nem kell jatszadozni az idozitesekkel sem, mert időtartamra a negyszogjel lejátszó rutin is olyan hosszú lesz, mint a többi.
Title: Re: SID lejátszó
Post by: endi on 2017.February.28. 00:14:12
megalmodtam a tutit, az összes variaciora legeneraljuk előre a digi lejátszó ciklust,nem bontjuk szét a vezerlest, mivel megúsztuk az önmódosító kódot, és oda update-eljuk be az értékeket, amit majd később meg is hívunk a következő vezerlesig. Ja és így nem kell jatszadozni az idozitesekkel sem, mert időtartamra a negyszogjel lejátszó rutin is olyan hosszú lesz, mint a többi.

áááá
előre ki kell elemezni a sid-et, és olyan lejátszót generálni, ami a lehetséges szólamokhoz a nick/ay megfelelő csatornáit használja (zaj, 4szög).
:)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.28. 10:56:29
Ahogy számolgatok, talán picit gyorsabb az LD (HL),xx, INC L .

Négyszögjelnél valójában a másik megoldás tűnik gyorsabbnak (4 ciklus különbség), de annak a használata növelné a kód méretét. Viszont kimaradt az INC IXL. :oops: Azonban ha jól látom, a DE regiszter már nem használt, ezért címezhetné az a delaytbl-t az IX helyett, így még a PUSH IX/POP IX is megtakarítható lenne.
Title: Re: SID lejátszó
Post by: geco on 2017.February.28. 11:00:48
Négyszögjelnél valójában a másik megoldás tűnik gyorsabbnak (4 ciklus különbség), de annak a használata növelné a kód méretét. Viszont kimaradt az INC IXL. :oops: Azonban ha jól látom, a DE regiszter már nem használt, ezért címezhetné az a delaytbl-t az IX helyett, így még a PUSH IX/POP IX is megtakarítható lenne.
Igen, észrevettem tegnap én is, az új kódban benne van már, és a DE-s címzés is, viszont a legújabba, az előre legenerált 8 digi lejátszó rutinhoz már nem is kell az se, ebbe kezdek bele ma :)
Az a tervem, hogy 8000-8800h-ra teszem a digi lejátszó rutinokat az inicializáló rutinjukkal együtt, mindegyik kerek 100h-n fog kezdődni, így könnyen meg lehet hívni, nem kell foglalkozni az időzítésekkel, mert csak a méretük változik majd, a futási idejük ugyanaz lesz, mert elhagyom az LD BC,4000h-t , helyette az LD B,40h-t használom, így a lejátszó is gyorsul 13 ciklust.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.28. 12:03:22
Nem tudom, ez hasznos-e, de ha sok az előre generált kód és táblázat, akkor azok lehetnek -raw -m2 -blocksize 8192 tömörített formátumban is, és a decompressDataBlock kicsomagolhatná a 8000h-9FFFh területre (a 2-es szegmenst átmenetileg belapozva a 3. lapra) a hangminták generálása előtt. Így a dacTable tárolásához sem kellene külön RLE formátum ha 8800h kezdőcímre kerül.

Az ilyen módon tömörítendő kód külön forrás file-ba kerülne (org 8000h és a végén nullákkal feltölteni hogy a méret 8192 legyen), a különböző lejátszó változatokat makrók generálhatnák, és a dacTable beépítéséhez elég lenne egy egyszerű include "dactable.s".

Szerk.: valami ilyesmire gondoltam (bár ez nem teljes vagy optimális megoldás):
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.February.28. 13:12:27
Nem tudom, ez hasznos-e, de ha sok az előre generált kód és táblázat, akkor azok lehetnek -raw -m2 -blocksize 8192 tömörített formátumban is, és a decompressDataBlock kicsomagolhatná a 8000h-9FFFh területre (a 2-es szegmenst átmenetileg belapozva a 3. lapra) a hangminták generálása előtt. Így a dacTable tárolásához sem kellene külön RLE formátum ha 8800h kezdőcímre kerül.

Az ilyen módon tömörítetendő kód külön forrás file-ba kerülne (org 8000h és a végén nullákkal feltölteni hogy a méret 8192 legyen), a különböző lejátszó változatokat makrók generálhatnák, és a dacTable beépítéséhez elég lenne egy egyszerű include "dactable.s".

Szerk.: valami ilyesmire gondoltam (bár ez nem teljes vagy optimális megoldás):
Szerintem hasznos :) , mert így már a lejátszó mérete is a sokszorosára duzzad.
Ilyesmire gondoltam én is a végső verzióban, nem ennyire átgondolva ;), csak annyira, hogy nem legenerálom a lejátszó rutinokat, hanem mindig csak kicsomagolom,a 0-val való feltöltés, meg ilyenek akkor jöttek volna, ha belefutok a hibákba :lol:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.28. 15:21:43
Vagy mi lenne, ha a vezérlő rutinból hívnánk meg 3x vagy akár többször JP-vel, és DE'-ben lenne a visszatérési cím?

Ezt eddig nem vettem észre, de nem rossz ötlet, bár ennek már 632 byte a tömörített mérete:
[attachurl=1]
Össze kellene hasonlítani az egyszerűbb változattal, hogy valóban hallhatóan jobb-e.

Szerk.: ez így valójában nem jó, az INC E-k helyett egyenletesebben elosztva kellene futtatni a sidSynth ciklust, és nem a végén egyszerre 194-szer.
Title: Re: SID lejátszó
Post by: geco on 2017.February.28. 16:13:20
Ezt eddig nem vettem észre, de nem rossz ötlet, bár ennek már 632 byte a tömörített mérete:
Össze kellene hasonlítani az egyszerűbb változattal, hogy valóban hallhatóan jobb-e.

Szerk.: ez így valójában nem jó, az INC E-k helyett egyenletesebben elosztva kellene futtatni a sidSynth ciklust, és nem a végén egyszerre 194-szer.
Húúú, nagyon szofisztikált a megoldásod, tetszik, én nekiestem a favágó módszerrel, aminek talán annyi előnye lehet, hogy néhol picit gyorsabb lehet.
Az INC E-s megoldást még a nem "generált" lejátszóra gondoltam, nem tudom a "generáltnál" érdemes-e szétbontani a dolgokat, elméletileg ennek már "sokkal gyorsabbnak" kéne lennie. Meg gondolkoztam a visszatérésen, és kb 40 ciklust enne meg az ugrás a rutinra, előtte a DE megadása, majd a JP (HL)-es visszatérés, az EXX-ekkel, és EX DE,HL-lel megfűszerezve, megéri ez a sok elpazarolt idő? (és ezt 3x)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.February.28. 16:43:12
Az INC E-s megoldást még a nem "generált" lejátszóra gondoltam, nem tudom a "generáltnál" érdemes-e szétbontani a dolgokat, elméletileg ennek már "sokkal gyorsabbnak" kéne lennie. Meg gondolkoztam a visszatérésen, és kb 40 ciklust enne meg az ugrás a rutinra, előtte a DE megadása, majd a JP (HL)-es visszatérés, az EXX-ekkel, és EX DE,HL-lel megfűszerezve, megéri ez a sok elpazarolt idő? (és ezt 3x)

Nem biztos, hogy megéri, ezért is ajánlottam először csak az egyszerűbb 50 Hz-es változatot, majd azzal összehasonlítani a "bontott" megoldást, hogy valóban eredményez-e javulást.
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 08:49:35
Én erre jutottam tegnap, lehet benne még sok hiba, és nincs benne a digi lejátszó rutinok 8000h-ra másolása, és még pár digi update-elő  LD (xxxx),a-t le lehet cserélni LD L,low addr .LD (HL),x-re majd.
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 10:51:32
Mi történt, reggel láttam még egy tegnap esti hozzászólást, már nem, letörölted?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.01. 11:07:01
Mi történt, reggel láttam még egy tegnap esti hozzászólást, már nem, letörölted?

Az a megoldás, amit most töltöttél fel, jobbnak tűnik, ezért beépítettem és hamarosan elkészül a frissített csomag.
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 11:30:15
Az a megoldás, amit most töltöttél fel, jobbnak tűnik, ezért beépítettem és hamarosan elkészül a frissített csomag.
Biztos?
Lehet jobban szól a 3 részre bontott változat a bonyolultabb visszatérés ellenére is, én is arra gondoltam, hogy meg kéne csinálni a két verziót, és összehasonlítani :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.01. 11:46:16
Lehet jobban szól a 3 részre bontott változat a bonyolultabb visszatérés ellenére is, én is arra gondoltam, hogy meg kéne csinálni a két verziót, és összehasonlítani :)

Az még nem "bontott" változat volt. :oops: Mindenesetre ez az 50 Hz-es verzió már nagyjából működik és kb. 500 ciklust fogyaszt a verzérlés, a lejátszási frekvencia 10588 Hz (lehetne 10494 is és 7 ciklussal gyorsabb vezérlés):

[attachurl=1]        (frekvencia javítva)

Szerk.: nem jól számoltam a frekvenciát, valójában csak 335 vagy 338 ciklus egy hangminta.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.01. 13:20:38
Lehet jobban szól a 3 részre bontott változat a bonyolultabb visszatérés ellenére is

Most próbálkoztam azzal is, de egyelőre nem igazán vált be (vagy hibás). :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 13:27:07
Most próbálkoztam azzal is, de egyelőre nem igazán vált be (vagy hibás). :oops:
Ha én csináltam volna, akkor azt mondanám, hogy tuti hibás :D
A leglassabb vezérlő időtartamra 512 alatti ciklust tippeltem tegnap, de bíztam benne, hogy kevesebb lesz 500-nál is a nem szétbontottnál, a szétbontottnál meg az volt a tippem, hogy több lesz egy picivel, mint a fele a nem szétbontottnak, a tippem az hogy a 3 kisebb megszakítás rosszabb eredményt ad, mint az egy picit hosszabb , mondjuk 2x-ese.
Még esetleg lehetne gyorsítani némelyik variánson pár ciklust, de gondolom a 3, nagyon max 10 annyira már nem számít.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.01. 13:34:13
A leglassabb vezérlő időtartamra 512 alatti ciklust tippeltem tegnap, de bíztam benne, hogy kevesebb lesz 500-nál is a nem szétbontottnál

Az itt található új verzióban (https://enterpriseforever.com/sound/sid-lejatszo/msg62612/#msg62612) 469-475 ciklus időt fogyaszt a 8100h-s lejátszó (2 PWM, 1 táblázat). De ha lassú memória van a 3. lapon, akkor valamivel több lehet, ilyenkor fordul elő ~500.
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 13:50:54
Az itt található új verzióban (https://enterpriseforever.com/sound/sid-lejatszo/msg62612/#msg62612) 469-475 ciklus időt fogyaszt a 8100h-s lejátszó (2 PWM, 1 táblázat). De ha lassú memória van a 3. lapon, akkor valamivel több lehet, ilyenkor fordul elő ~500.
Hm, ez nagyon jó eredmény, legalábbis szerintem :lol:
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 17:56:29
Ez a verzió fasza, én nem hallok torzítást, lehet fölösleges is a szétbontással próbálkozni, nem gondoltam volna, hogy sikerül elérni ilyen minőséget :)

Más, a legutóbb feltöltött EP verziót aki tesztelte, talált benne hibát, ha nem, akkor felteszem végleges verzióként.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.01. 18:30:50
Az EP verzió egyébként itt található (https://enterpriseforever.com/sound/sid-lejatszo/msg62546/#msg62546), kezd elveszni a sok Spectrumos file között. :)

Ez a verzió fasza, én nem hallok torzítást, lehet fölösleges is a szétbontással próbálkozni, nem gondoltam volna, hogy sikerül elérni ilyen minőséget :)

Még TAP változatot kellene készíteni, úgy látom, a WOS fórumon (https://www.worldofspectrum.org/forums/discussion/54160/c64-sid-player-coming-soon-to-specy-128#latest) már többen is kifogásolják a TZX-et. :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 18:59:30
Még TAP változatot kellene készíteni, úgy látom, a WOS fórumon (https://www.worldofspectrum.org/forums/discussion/54160/c64-sid-player-coming-soon-to-specy-128#latest) már többen is kifogásolják a TZX-et. :oops:
Sajnos igen, nem igazából értem, mert igazi gépen jobb lenne a TZX, gyorsabban tölt, megcsinálom a TAP-ot, most épp egy képpel szüttyögtem, beleteszem a TZX változatba is, vagy csak abba tegyem bele? :D
Ez lesz a kép, ha nincs kifogás ellene :)
[attach=1]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.01. 19:24:08
most épp egy képpel szüttyögtem, beleteszem a TZX változatba is, vagy csak abba tegyem bele? :D

Lehet a TZX-ben is, ha nincs különösebb hátránya. Esetleg itt is használható lehetne a tömörítés, a 4200h-s kód és a képernyő (INCBIN használatával) külön forrás file-ba kerülne, és ennek a tömörített változatát kellene E000h címre kicsomagolni, majd a helyére másolni.
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 19:31:15
Lehet a TZX-ben is, ha nincs különösebb hátránya. Esetleg itt is használható lehetne a tömörítés, a 4200h-s kód és a képernyő (INCBIN használatával) külön forrás file-ba kerülne, és ennek a tömörített változatát kellene E000h címre kicsomagolni, majd a helyére másolni.
Elméletileg nincs, én is így gondoltam, csak 0c000h címre kicsomagolva, és még a betöltőben, már be is csomagoltam , 1477 bájt lett :) , és az alsó 800h-t direkt üresen hagytam a képen, attr bájtja meg 3fh, hogy ne piszkítson bele a kód ami 4000-47ffh területen henyél :)
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 19:33:13
De használom inkább az incbint a lejátszóban megoldást :)
Már értem miért mondtad a 0e000h-s kicsomagolási címet, mert a 0c000h-ba belelóg a kép adat csomagolva :lol:, ha nem előre teszem a képet, ami macerásabb is lehet.
Title: Re: SID lejátszó
Post by: endi on 2017.March.01. 20:41:12
specy128 verzióról van már videó?
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 20:53:28
specy128 verzióról van már videó?
Én nem csináltam, de még polírozás alatt van, a TZX-be betettem a képet, és az 50-250Hz-ig való vezérlést, most a TAP verziót kezdem.
Title: Re: SID lejátszó
Post by: geco on 2017.March.01. 22:56:20
ha nincs hiba benne, akkor a végleges SIDBasicSP
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 09:55:22
Néhány kisebb fejlesztésre még találtam lehetőséget, például a kép C64 formátumra konvertálva jobban tömöríthető, a sebességet pedig kiszámítom a fejléc alapján, tehát 41 és 255 között bármilyen érték működik. Így többet tud az EP verziónál, bár a sebesség növekedésével egyre rosszabb a minőség.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 10:06:58
Néhány kisebb fejlesztésre még találtam lehetőséget, például a kép C64 formátumra konvertálva jobban tömöríthető, a sebességet pedig kiszámítom a fejléc alapján, tehát 41 és 255 között bármilyen érték működik. Így többet tud az EP verziónál, bár a sebesség növekedésével egyre rosszabb a minőség.
És még van egy, most a max file méret 5e80h, egy kis mókolással elérhetnénk az EP-s maximumot, az 5f00h-t.
Tegnap gondoltam én is a fejléc alapján szorzással való számolásra, de a fejlécben lehet 50,60,100,150,200,250-től eltérő érték is ? És már nem volt kedvem mókolni vele :D A kép eszembe se jutott :)
Ha gondolod, hogy érdemes ezeket megycsinálni, akkor ma megcsinálom.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 10:15:47
A fent említett módosítások már elkészültek, csak még tesztelem. Ezen kívül még megpróbálom egy forrásba építeni a TAP és TZX verziót feltételes fordítással.

És még van egy, most a max file méret 5e80h, egy kis mókolással elérhetnénk az EP-s maximumot, az 5f00h-t.

Ha a sidSynthPacked is átkerül a 4200h-s területre, akkor ez könnyen megoldható. Mást talán nem is kellene oda másolni.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 10:46:28
A fent említett módosítások már elkészültek, csak még tesztelem. Ezen kívül még megpróbálom egy forrásba építeni a TAP és TZX verziót feltételes fordítással.
Oké :) Én mókolással csináltam a tapot, elkészítettem a TZX-et, és a Basic adatblokkot átmásoltam TAP-ba, majd beszúrtam mögé a kódot broken data blokként :D
Ha a sidSynthPacked is átkerül a 4200h-s területre, akkor ez könnyen megoldható. Mást talán nem is kellene oda másolni.
Bőven, annyi, hogy át tettem a 4400h-ra a decompresstable-t, azt kell még elmozgatni 4600h-ra, vagy 4700h-ra, és a tap verzióban a töltési hosszat átállítani 5f10h-ra
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 11:49:01
Hm elszúrtam a lapozó regisztert, pedig több programban 7dh-t használtak, és a gyors 0B8h-s ay regiszter választás nem működik mindenhol, ezt írta Hikaru a WOS-on, de gondolom láttad te is :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 11:51:19
Hm elszúrtam a lapozó regisztert, pedig több programban 7dh-t használtak, és a gyors 0B8h-s ay regiszter választás nem működik mindenhol, ezt írta Hikaru a WOS-on, de gondolom láttad te is :)

Az AY regiszter valójában most már 88h, az sem megbízható? Szerk.: úgy látom, az sem. :( Bár nem tudom miért, az AY címzése csak 4 bites. Mindenesetre átalakítom, bár így valamivel rosszabb lesz a minőség (7 ciklus lassulás a hangminta lejátszásnál, és még 10 ciklus a vezérlésnél). Ha a C0FDh sem jó, akkor lehet, hogy a táblázatos D/A helyett érdemesebb lenne a 3 külön 4 bites csatornát visszaállítani.

A lapozási hiba javításához csak az összes OUT (7DH),A-t kell FDh-ra cserélni?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 12:02:36
Egyelőre cseréltem az OUT (7DH),A-kat és elvégeztem a korábban említett módosításokat:
[attachurl=1]
A TAP verziót még nem teszteltem.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 12:24:25
YM kompatibilis változat:
[attachurl=1]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 13:11:43
A fenti csomagok egyébként nagyjából már késznek (vagy legalábbis használhatónak) tűnnek, eltekintve az esetleges hibáktól vagy további optimalizálási lehetőségektől. A WOS-on érdemes lenne említeni a "kompatibilitási" verziót, mert úgy látszik, a Spectrum emulátorok többsége YM-et emulál. :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 13:21:42
A fenti csomagok egyébként nagyjából már késznek (vagy legalábbis használhatónak) tűnnek, eltekintve az esetleges hibáktól vagy további optimalizálási lehetőségektől. A WOS-on érdemes lenne említeni a "kompatibilitási" verziót, mert úgy látszik, a Spectrum emulátorok többsége YM-et emulál. :oops:
Nagyon gyors vagy, mindent megcsináltál, amit a WOS-on mondtak, meg ami ma, tegnap itt előkerült :)
Tesztelni majd otthon tudom, a forrásokkal szemezgettem :)
Érdemes mind a kettő verziót megemlíteni? Mondjuk talán jobb az AY-s, mert az picivel gyorsabb, tehát érdemes lehet, viszont sztem addig nem kéne a linket is megosztani ott, amíg nincs benne a TAP verzió a csomagban, nem?
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 13:28:43
Írtam a WOS-ra, a tapo-t meg megpróbálom most megcsinálni.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 13:36:00
Érdemes mind a kettő verziót megemlíteni? Mondjuk talán jobb az AY-s, mert az picivel gyorsabb, tehát érdemes lehet

Az AY-s 2 százalékkal gyorsabb, a lejátszás és a vezérlés is, de ha működik az adott gépen, akkor ez az előny is több a semminél. :) Bár csak ezért két külön verziót fejleszteni talán nem éri meg. Esetleg lehetne feltételesen fordítani, ez a különbség:
Code: Diff
  1. diff -rdNU4 ay/sidbintSP.s ym/sidbintSP.s
  2. --- ay/sidbintSP.s      2017-03-02 13:04:06.000000000 +0100
  3. +++ ym/sidbintSP.s      2017-03-02 13:28:26.000000000 +0100
  4. @@ -8,14 +8,14 @@
  5.  convertC64Img   equ     4700h
  6.  input_buf       equ     5b00h
  7.  reoradd         equ     input_buf+300h
  8.  stack           equ     0c000h
  9. -; sidSynth loop time = 338 cycles
  10. -; sample rate = fSR = 17734475 / 5 / 338 = 10494 Hz
  11. -; frequency multiplier = 512 * (17734475 / 18 / 256) / fSR = 188
  12. -FREQ_MULT       equ     188
  13. +; sidSynth loop time = 345 cycles
  14. +; sample rate = fSR = 17734475 / 5 / 345 = 10281 Hz
  15. +; frequency multiplier = 512 * (17734475 / 18 / 256) / fSR = 192
  16. +FREQ_MULT       equ     192
  17.  ; frame duration should be 17734475 / 5 / (17734475 / 18 / 63 / 312) = 70762 Z80 cycles
  18. -SMPS_PER_FRAME  equ     208
  19. +SMPS_PER_FRAME  equ     204
  20.  
  21.          phase   start
  22.  
  23.  startpr di
  24. @@ -759,14 +759,14 @@
  25.          jr      c,error
  26.  ; fIRQ = (17734475 / 18 / 63 / 312) * (fM64 / 50)
  27.  ; fZ80 = 17734475 / 5
  28.  ; Z80 cycles per frame = fZ80 / fIRQ
  29. -; Z80 cycles per sample = 338
  30. -; IRQ cost = ~480 cycles
  31. -; N = (fZ80 / fIRQ - 480) / 338 = 10467.69 / fM64 - 1.42
  32. +; Z80 cycles per sample = 345
  33. +; IRQ cost = ~490 cycles
  34. +; N = (fZ80 / fIRQ - 490) / 345 = 10255.304 / fM64 - 1.42
  35.          ld      b, a
  36.          ld      de, 1
  37. -        ld      hl, 0e3b1h              ; 10467.69 * 256 = 28E3B1h
  38. +        ld      hl, 0f4eh               ; 10255.304 * 256 = 280F4Eh
  39.          ld      a, 28h
  40.  spdlp1  add     hl, hl
  41.          rla
  42.          sub     b
  43. diff -rdNU4 ay/sidsynth.s ym/sidsynth.s
  44. --- ay/sidsynth.s       2017-03-02 13:03:36.000000000 +0100
  45. +++ ym/sidsynth.s       2017-03-02 13:12:52.000000000 +0100
  46. @@ -61,9 +61,9 @@
  47.          ld      (.l4 + 1), hl           ; freq2
  48.          pop     hl
  49.          ld      (.l7 + 1), hl           ; freq3
  50.          ld      bc, 0c0fdh
  51. -;       ld      d, high dacTable
  52. +        ld      de, 090ah
  53.          exx
  54.          xor     a
  55.          out     (0fdh), a
  56.  
  57. @@ -118,19 +118,19 @@
  58.      endif
  59.          add     a, c
  60.          exx
  61.          ld      l, a
  62. -;       ld      h, d
  63.          ld      h, high dacTable
  64. -        out     (c), h
  65. +        ld      a, 8
  66. +        out     (c), a
  67.          outi
  68.          inc     b
  69.          inc     h
  70. -        out     (c), h
  71. +        out     (c), d
  72.          outd
  73.          inc     b
  74.          inc     h
  75. -        out     (c), h
  76. +        out     (c), e
  77.          outi
  78.          inc     b
  79.          exx
  80.          djnz    .sidSynth
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 13:41:28
2% is több, mint a semmi, és lehet jelentkezik hangminőségben is :)
Engem nem zavar a külön fordítás, és úgy érzem a mostani verzió már a kész verzió :)
Az UnrealSpeccy-n, és a RealSpec-en működik :) , no meg az EP128emun :D , én nem is használok mást, hacsak nem TRD-s fájlokról van szó, meg is voltam lőve a Wolf2004-nél, mert amiatt az UnrealSpeccyt kellett használnom :ds_icon_cheesygrin:
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.March.02. 14:09:39
én nem is használok mást, hacsak nem TRD-s fájlokról van szó, meg is voltam lőve a Wolf2004-nél, mert amiatt az UnrealSpeccyt kellett használnom :ds_icon_cheesygrin:
Pedig írtam már LUA scriptet erre a problémára :-) (https://enterpriseforever.com/emulatorok/lua-scriptek-fejlesztese/msg29497/#msg29497)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 14:34:36
Ez ugyan csak minimális optimalizálás amiért nem érdemes új verziót kiadni, de a C64 képet konvertáló rutint valójában nem kell 4700h címre másolni, ahol még lassabb is. Meg lehet oldani, hogy az eredeti helyén (E700h) fusson:

Code: Diff
  1. diff -rdNU4 ym/cod47scr.s ym2/cod47scr.s
  2. --- ym/cod47scr.s       2017-03-02 12:00:12.000000000 +0100
  3. +++ ym2/cod47scr.s      2017-03-02 15:54:29.097551234 +0100
  4. @@ -1,6 +1,6 @@
  5.  
  6. -        org     4700h
  7. +        org     0e700h
  8.  
  9.  convertC64Img:
  10.          ld      hl, 0f800h
  11.          ld      de, 5800h
  12. @@ -36,7 +36,7 @@
  13.          and     0f8h
  14.          ld      d, a
  15.          jp      .l1
  16.  
  17. -        block   4800h - $, 00h
  18. +        block   0e800h - $, 00h
  19.          incbin  "sidc64.scr"
  20.  
  21. diff -rdNU4 ym/sidbintSP.s ym2/sidbintSP.s
  22. --- ym/sidbintSP.s      2017-03-02 13:28:26.000000000 +0100
  23. +++ ym2/sidbintSP.s     2017-03-02 15:53:55.685549793 +0100
  24. @@ -4,9 +4,9 @@
  25.  decodeTablesBegin   equ start+16
  26.  triangletable   equ     8b00h
  27.  sawtoothtable   equ     triangletable+0f00h
  28.  noisetable      equ     triangletable+1e00h
  29. -convertC64Img   equ     4700h
  30. +convertC64Img   equ     0e700h
  31.  input_buf       equ     5b00h
  32.  reoradd         equ     input_buf+300h
  33.  stack           equ     0c000h
  34.  ; sidSynth loop time = 345 cycles
  35. @@ -21,9 +21,9 @@
  36.  startpr di
  37.          ld      hl,startp2
  38.          push    hl
  39.          ld      ix,screen+1
  40. -        ld      de,convertC64Img+0a000h
  41. +        ld      de,convertC64Img
  42.          ld      a,80h
  43.          jp      decompressDataBlock
  44.  
  45.          db      "Töki,Drazsé,Gombóc,Gyurmi,Bogyó,Lizi,Maszat,Gombóc.."
  46. @@ -941,13 +941,9 @@
  47.          dephase
  48.  
  49.  screen  incbin  "cod47scr.bin"
  50.  
  51. -startp2 ld      hl,convertC64Img+0a000h
  52. -        ld      de,convertC64Img
  53. -        ld      bc,100h
  54. -        ldir
  55. -        call    convertC64Img
  56. +startp2 call    convertC64Img
  57.          ld      hl,cod4200
  58.          ld      de,4200h
  59.          ld      bc,c4200ln
  60.          ldir
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 14:43:15
Pedig írtam már LUA scriptet erre a problémára :-) (https://enterpriseforever.com/emulatorok/lua-scriptek-fejlesztese/msg29497/#msg29497)
Óóóó, ha ezt tudom, olyan régen volt, hogy addig vissza se nyúlik a memóriám :lol:
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 14:49:25
Itt a csomag újból, benne a TZX fájlok, TAP-ok, és az új forrás, így jó lesz?
Ha igen, ezt linkelem be a WOS-on.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 14:52:47
Ez ugyan csak minimális optimalizálás amiért nem érdemes új verziót kiadni, de a C64 képet konvertáló rutint valójában nem kell 4700h címre másolni, ahol még lassabb is. Meg lehet oldani, hogy az eredeti helyén (E700h) fusson:

Azt a pár pikoszekundumot már észre se veszi senki, a súlyos konvertáló másodpercek mellett ;)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 15:02:13
Itt a csomag újból, benne a TZX fájlok, TAP-ok, és az új forrás, így jó lesz?
Ha igen, ezt linkelem be a WOS-on.

Egyelőre csak a TAP/YM verziót néztem és a 150 Hz-es Paperboy-t, ami jónak látszik, de a következő file töltése lefagy.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 15:05:44
Egyelőre csak a TAP/YM verziót néztem és a 150 Hz-es Paperboy-t, ami jónak látszik, de a következő file töltése lefagy.
Hm, ilyet tapasztaltam én is tegnap, de minden verziónál csak egyszer, és én is egyszer a paperboy után, aztán betöltöttem még vagy 3x, és semmi se történt, ez vajon miért lehet? Én csak a megszakításra tudok gondolni, egész program alatt tiltott, a kis genya ROM loader engedélyezi visszatéréskor, és random a fagyi.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 15:09:03
Az 556H rutin fagy le, talán a ROM nem szereti, ha felülíródik az 5B00-5Cxx terület? Ezért lehet az, hogy a TZX működik. Talán elég lenne csak néhány fontos rendszerváltozót (pl. 5B5Ch = 7FFDh port) beállítani.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 15:20:40
Itt kellene a call tapeload elé egy ld (5b5ch), a:
Code: ZiLOG Z80 Assembler
  1.     if USE_ROM_LOADER == 0
  2.         ld      hl, input_buf   ; M64 input file
  3.         ld      de, 364dh
  4.         call    readBlock
  5.     else
  6.         ld      a,10h
  7.         out     (0fdh),a
  8.         call    tapeload
  9.     endif
De az is probléma lehet még, ha a ROM esetleg felülírja a már betöltött adatot.

Szerk.: az működhetne, ha csak a TAP verzióban (USE_ROM_LOADER != 0) átmenetileg tiltott lenne a megszakítás IM 2 és egyszerű RET utasításól álló IRQ rutin használatával? Az IM 2-es táblázatnak van hely például a 4500h-4600h területen.

Szerk. 2: egyéb változókkal is problémák vannak még, például 5C3Dh-n a veremmutató található.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 15:38:03
Itt kellene a call tapeload elé egy ld (5b5ch), a:
Code: ZiLOG Z80 Assembler
  1.     if USE_ROM_LOADER == 0
  2.         ld      hl, input_buf   ; M64 input file
  3.         ld      de, 364dh
  4.         call    readBlock
  5.     else
  6.         ld      a,10h
  7.         out     (0fdh),a
  8.         call    tapeload
  9.     endif
De az is probléma lehet még, ha a ROM esetleg felülírja a már betöltött adatot.

Szerk.: az működhetne, ha csak a TAP verzióban (USE_ROM_LOADER != 0) átmenetileg tiltott lenne a megszakítás IM 2 és egyszerű RET utasításól álló IRQ rutin használatával? Az IM 2-es táblázatnak van hely például a 4500h-4600h területen.
Nekem az jutott eszembe, hogy lehet az interrupt rutin száll el, mert felülírtuk a rendszerváltozós területet, lehet az IM 2-es megoldás lesz a legjobb, meg ami eszembe jutott, megnézni a ROM rutint, hogy meg tudom-e hívni úgy, hogy ne legyen engedélyezett interrupt visszatéréskor.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 15:43:58
Az RST 8 rutin 5C3Dh címről olvassa a veremmutató értékét, ez is hibát okoz.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 15:44:56
Úgy látom, meg tudom hívni úgy, hogy ne legyen a vége EI. 0562-t kell meghívni, es a meghívás előtt pár utasítást kiadni, sztem ezt választom, így kihagyjuk az RST 08-at, ami ha jól tudom a hibakezelés.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 16:17:03
Jó lesz, már csak a space megnyomása okoz problémát, ezt kell lekezelni.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 16:47:08
Az AY-YM verzióknál még azt kellene megnézni, hogy a D/A nem igényel-e különböző táblázatot a legjobb minőséghez, lehet, hogy ugyanaz a hangerő érték eltérő szintet eredményez a két IC-nél.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 18:33:22
Az AY-YM verzióknál még azt kellene megnézni, hogy a D/A nem igényel-e különböző táblázatot a legjobb minőséghez, lehet, hogy ugyanaz a hangerő érték eltérő szintet eredményez a két IC-nél.
Mikre nem gondolsz :)
Megpróbálok én is keresgélni.
Elméletileg a tap problémát orvosoltam, most nem akadt ki egyszer sem a program, a lenti csatolmányt (https://enterpriseforever.com/sound/sid-lejatszo/?action=dlattach;attach=17527) lecseréltem.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 18:51:45
Úgy látom ugyanazok az értékek vannak, csak az YM dupla olyan felbontású, a leírás alapján 32 lépcsőben éri el a maximumot az AY 16 lépcsőjével szemben, de minden 2. érték ugyanaz az YM-en, mint az AY-n, az YM2149-et néztem, az YM2149F-re még nem találtam doksit
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 21:28:29
Feltettem tesztelésre az új verziót a WOS-ra
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.02. 21:35:49
Úgy látom ugyanazok az értékek vannak, csak az YM dupla olyan felbontású, a leírás alapján 32 lépcsőben éri el a maximumot az AY 16 lépcsőjével szemben, de minden 2. érték ugyanaz az YM-en, mint az AY-n, az YM2149-et néztem, az YM2149F-re még nem találtam doksit

Megnéztem egy pár emulátor forráskódját, és van eltérés, de az emulátorok között is. :) Az ay_da_opt.cpp (és az ep128emu) ugyanazt a táblázatot használja, mint a FUSE. Lehet, hogy valamelyik másik emulátor pontosabb, ezt talán a WOS fórumon lenne érdemes kérdezni. Azonban gyártási pontatlanságok miatt is lehetnek eltérések, ha az egyes emulátorok valódi gépről mért értékeket használnak is, azok bizonyos mértékben különbözőek minden gépen.
Title: Re: SID lejátszó
Post by: geco on 2017.March.02. 21:44:33
Megnéztem egy pár emulátor forráskódját, és van eltérés, de az emulátorok között is. :)
:lol:
Az ay_da_opt.cpp (és az ep128emu) ugyanazt a táblázatot használja, mint a FUSE. Lehet, hogy valamelyik másik emulátor pontosabb, ezt talán a WOS fórumon lenne érdemes kérdezni. Azonban gyártási pontatlanságok miatt is lehetnek eltérések, ha az egyes emulátorok valódi gépről mért értékeket használnak is, azok bizonyos mértékben különbözőek minden gépen.
Megkérdezzem?
Én csak a két chip envelope grafikonját néztem (mert csak azt találtam), ott nem láttam eltérést.
Toltam egy kis reklámot az EP128emunak is, hátha a Speccysek is megszeretik :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 11:38:20
Úgy látszik, az "AY" mód valójában AY-n sem megbízható, a WOS-on mutatott módszer az IC típusának a felismerésére csak a lebegő adatbusz miatt működik, és nem azért mert nem teljes a címdekódolás.

A TAP verziónál talán az is megoldás lehetne, ha a program induláskor mentené az 5B00-5CFFh területet valahol a video memória elején (pl. 4500-46FFh), és utána a tapeload rutin egyszerűen visszamásolná. Így "szabványosabb" módon lehetne használni a ROM rutinokat, ami esetleg javíthatná a kompatibilitást.
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 11:42:08
A TAP verziónál talán az is megoldás lehetne, ha a program induláskor mentené az 5B00-5CFFh területet valahol a video memória elején (pl. 4500-46FFh), és utána a tapeload rutin egyszerűen visszamásolná. Így "szabványosabb" módon lehetne használni a ROM rutinokat, ami esetleg javíthatná a kompatibilitást.
Szerinted a TAP-ot nem tudják betölteni más gépeken, mert megváltozott a 48K-s ROM rutin a +2/+3 ,és egyéb gépeken?
Én erre nem gondoltam, azt hittem ezen részén a ROM-nak nem változtattak az évek folyamán.
Azt hittem, hogy bekerül valami lassú RAM a 3. lapra, és emiatt nem megy a töltés.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.March.03. 12:01:24
Inkább az a kérdés a TAP-oknál, hogy a mindenféle modern cuccal (vinyó, SD, stb), azzal megy-e?
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.March.03. 12:03:51
Úgy látom, meg tudom hívni úgy, hogy ne legyen a vége EI. 0562-t kell meghívni
Szerintem kb az összes játék is ezt használja (már amelyiknek nem saját loadere van). Ha jól rémlik az EP-s Spectrum Emulátorban is ez a cím van meghackkelve (plusz a save is).
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 13:13:51
Szerintem kb az összes játék is ezt használja (már amelyiknek nem saját loadere van). Ha jól rémlik az EP-s Spectrum Emulátorban is ez a cím van meghackkelve (plusz a save is).
Igen, nekem is ez rémlik, a 0562h és a 0556h a hivatalos belépési pont, és van egy-két elvetemült, ami másik címet hív, amire nem emlékszem.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 13:25:13
Próbálkoztam az előbb említett másolós módszerrel, de a Space lenyomva tartásakor lefagy, ezért visszaállítottam az eredeti megoldást. Az ay_da_opt.cpp tartalmaz ayumi (https://github.com/true-grue/ayumi/blob/master/ayumi.c) táblázatokat is, ezeknek a használata a compile.sh szerkesztésével engedélyezhető. A vezérlés gyorsult 12 ciklust, bár laphatáron valamivel lassabb lett (aminek kevesebb jelentősége van).

[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 13:32:28
Próbálkoztam az előbb említett másolós módszerrel, de a Space lenyomva tartásakor lefagy, ezért visszaállítottam az eredeti megoldást. Az ay_da_opt.cpp tartalmaz ayumi (https://github.com/true-grue/ayumi/blob/master/ayumi.c) táblázatokat is, ezeknek a használata a compile.sh szerkesztésével engedélyezhető. A vezérlés gyorsult 12 ciklust, bár laphatáron valamivel lassabb lett (aminek kevesebb jelentősége van).
Leginkább az IM2 használata lehet megoldás a megszakítás problémára, amit javasoltál, de ez is csak akkor fontos, ha tényleg módosult a ROM loader a különböző verzióknál, egyébként jónak kéne lennie, azt akarom még megnézni, hogy véletlenül nem marad-e az épp lejátszott szegmens a 3. lapon, mert ez okozhat gondot.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 14:00:59
32 bites sid_conv, sid_dump, epcompress és sjasm 0.39g6:
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 14:27:08
32 bites sid_conv, sid_dump, epcompress és sjasm 0.39g6:
(Attachment Link)
Közzé is tettem :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 15:35:42
A fix 5F10h blokk mérettel való betöltést is kifogásolják, bár ennek eredeti magnós gépen működnie kellene, csak a valódi gépen magnót "emuláló" speciális hardvereknél okoz problémát. De úgy látszik, elsősorban az utóbbiakat használják. Tehát vagy a fejlécnek kellene külön blokkba kerülnie TAP esetén, vagy minden TAP file-nak tartalmaznia kellene a lejátszót is a megfelelő blokk mérettel fordítva.
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 15:43:00
A fix 5F10h blokk mérettel való betöltést is kifogásolják, bár ennek eredeti magnós gépen működnie kellene, csak a valódi gépen magnót "emuláló" speciális hardvereknél okoz problémát. De úgy látszik, elsősorban az utóbbiakat használják. Tehát vagy a fejlécnek kellene külön blokkba kerülnie TAP esetén, vagy minden TAP file-nak tartalmaznia kellene a lejátszót is a megfelelő blokk mérettel fordítva.
Igen, és igen, és igen :) Most néztem én is, válaszoltam is, a fejléces megoldás nem jutott eszembe, az egy teljesen jó ötlet, és kevésbé macerás, de a legegyszerűbb, csinál magának mindenki egy basic loadert, és vagy lecsökken a max file méret 200h-val, vagy az egészet 200h-val eltolva töltik be, majd a lejátszó bemásolja magát meg az adatot a helyére.
A szofisztikált MB02 tap emulation, tőccsék magnóról :ds_icon_cheesygrin:
Úgy emlékszem a LOAD "" CODE-hoz csak a töltési címet kell megadni, de ha MB02-nél kell a hossz is, akkor mindenki bekódolhatja magának.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 17:57:53
Lehetne a Spectrumosok számára külön rövidebb M64-eket is készíteni, tulajodnképpen nem is kellene újra konvertálni, csak egy rövid programot írni, ami kicsomagolja, 96K-ra korlátozza és újra tömöríti a parancssorban megadott összes file-t.

Az ilyen csonkított file még mindig EP kompatibilis maradna, de a lejátszót egyszerűsíthetné a Spectrum specifikus formátum, illetve az ilyen célra készült sid_conv változat figyelembe vehetné a kisebb hangerő felbontást a táblázatos hullámformáknál.
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 18:12:06
Lehetne a Spectrumosok számára külön rövidebb M64-eket is készíteni, tulajodnképpen nem is kellene újra konvertálni, csak egy rövid programot írni, ami kicsomagolja, 96K-ra korlátozza és újra tömöríti a parancssorban megadott összes file-t.

Az ilyen csonkított file még mindig EP kompatibilis maradna, de a lejátszót egyszerűsíthetné a Spectrum specifikus formátum, illetve az ilyen célra készült sid_conv változat figyelembe vehetné a kisebb hangerő felbontást a táblázatos hullámformáknál.
Szerintem nem érdemes ezért új programokat írni, megnézem, lehet-e a Block editorban szétdarabolni egy-egy adatblokkot, ha lehet, akkor a csomagba betett tapokban elintézem, hogy a fejléc külön legyen, és meg is van oldva a hossz probléma, azt nem tudom, hogy az 5b00h-5bffh-ra írás a gyönyörű lemezes környezetben emulált tap-oknál okoz-e problémát.
Vagy direkt lemezes rendszerekre meg lehet csinálni a basic loaderes verziót, ami mindent 200h-val eltolva tölt be mindent, majd betöltés után minden a helyére kerül.
Melyik legyen?
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 18:51:37
És megvan a legegyszerűbb megoldás, mivel szerencsére fejléces tap-okat csináltam, a fejlécben el lehet tárolni a következő adatblokk hosszát, az 5b0bh címről ki is lehet olvasni a betöltés után, így ezt felhasználhatjuk a file betöltéséhez, annyi, hogy minden tap-ban meg kell adni az adatblok hosszát a fejlécben.
Már 3 lehetőség közül lehet választani :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 18:55:43
Szerintem nem érdemes ezért új programokat írni

Az M64 rövidítés egyszerű (ugyanúgy fordítható, mint a sid_conv.cpp):
[attachurl=1]

És a használata is:
./m64trunc *.m64

Tulajdonképpen a sid_conv.cpp is könnyen "Spectrumosítható" lenne, csak akkor mindent újra kellene konvertálni.

Quote
Melyik legyen?

Nem tudom, ezt valószínűleg a WOS-on tudják eldönteni, melyik megoldás használhatóbb. De a maximális file méret csökkenése szerintem nem lenne nagy probléma, a legtöbb zenének elég az 5D00h is, a kivételek (pl. IK) pedig rövidíthetők. Ami ilyen sok helyet igényel, az valószínűleg lényegesen hosszabb 2:43-nál. :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 18:58:22
És megvan a legegyszerűbb megoldás, mivel szerencsére fejléces tap-okat csináltam, a fejlécben el lehet tárolni a következő adatblokk hosszát, az 5b0bh címről ki is lehet olvasni a betöltés után, így ezt felhasználhatjuk a file betöltéséhez, annyi, hogy minden tap-ban meg kell adni az adatblok hosszát a fejlécben.

Ez jónak tűnik, ha a WOS-on sem kifogásolják.
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 19:11:12
Az M64 rövidítés egyszerű (ugyanúgy fordítható, mint a sid_conv.cpp):
Oké, a rövidítést közzéteszem ott is.

Tulajdonképpen a sid_conv.cpp is könnyen "Spectrumosítható" lenne, csak akkor mindent újra kellene konvertálni.
Igen, az újrakonvertálást akarom minden áron elkerülni, azzal már nincs kedvem szüttyögni :D
És az EP formátummal sincs semmi baj :)
Nem tudom, ezt valószínűleg a WOS-on tudják eldönteni, melyik megoldás használhatóbb. De a maximális file méret csökkenése szerintem nem lenne nagy probléma, a legtöbb zenének elég az 5D00h is, a kivételek (pl. IK) pedig rövidíthetők. Ami ilyen sok helyet igényel, az valószínűleg lényegesen hosszabb 2:43-nál. :)
igen :D , az a tippem, hogy a legnagyobb fájl se érné el 2:43-as hossznál a 16kb-t sem :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 20:08:12
Az OUT (0FDh), A-s lapozásnál lehet, hogy érdemes lenne az A 6. bitjét beállítani (azaz például 0 helyett 40h-t írni)? Most olvasom, hogy a +2A és +3 gépeken nem működik a lapozás, ha a 16 bites cím nem 01xxxxxxxxxxxx0xb, de az adat 6. bitje nem tűnik kihasználtnak.

Bár ez a többi gépen csak lassabb, mert így contended lesz a cím (1. lap).
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 20:21:30
Az OUT (0FDh), A-s lapozásnál lehet, hogy érdemes lenne az A 6. bitjét beállítani (azaz például 0 helyett 40h-t írni)? Most olvasom, hogy a +2A és +3 gépeken nem működik a lapozás, ha a 16 bites cím nem 01xxxxxxxxxxxx0xb, de az adat 6. bitje nem tűnik kihasználtnak.

Bár ez a többi gépen csak lassabb, mert így contended lesz a cím (1. lap).
Szerintem (de lehet rosszul gondolom) az a baj, hogy alap ROMkiosztás a +2a/+3-as gépeken a ROM0/ROM1, és nem állítottam ezen a regiszteren, ezért amikor kiadjuk a OUT (0FDh),A -t ROM1-et választjuk ki, és nekünk a ROM3 kéne.
Kipróbáltam, UnrealSpeccyn működik is , marad a ROM3, vagyis a 48k Basic :)
Code: [Select]
  ld a,04h
   ld bc,1ffdh
   out (c),a
   ld a,10h
   ld b,7fh
   out (c),a
   out (0fdh),a

Miért is vannak agyonbonyolítva a +2 utáni verziók? Egyszerűbben ezt nem lehetett volna?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.03. 20:42:34
Kipróbáltam, UnrealSpeccyn működik is , marad a ROM3, vagyis a 48k Basic :)

Az utolsó OUT (0FDH),A biztosan kell? Mindenesetre ez a kódrészlet csak a TAP betöltésnél lényeges, a fontosabb kérdés, hogy a többi FDh-s lapozás maradhat-e, azaz hibás a FAQ és valójában nem kell beállítani a 6. bitet?
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.March.03. 20:44:58
És ott van még az is, hogy ha jól tudom ezeken az újabb 128-asokon más a lassú/gyors RAM kiosztás is.
Title: Re: SID lejátszó
Post by: geco on 2017.March.03. 20:50:55
Az utolsó OUT (0FDH),A biztosan kell? Mindenesetre ez a kódrészlet csak a TAP betöltésnél lényeges, a fontosabb kérdés, hogy a többi FDh-s lapozás maradhat-e, azaz hibás a FAQ és valójában nem kell beállítani a 6. bitet?
Nem, csak a teszt miatt volt benne :)
Igen, töltés előtt kiadjuk ezt a kódot, az out (0fdh),a nélkül , lejátszás közben meg pont jók lesznek az out (0fdh),a-k

És ott van még az is, hogy ha jól tudom ezeken az újabb 128-asokon más a lassú/gyors RAM kiosztás is.
Igen, de szerencsére a 0-ás , és a 2-es lap, ahogy látom mindenhol gyors, lejátszás közben ezek vannak használatban :)
Title: Re: SID lejátszó
Post by: geco on 2017.March.04. 00:16:53
Igazad volt, az out(FD),a nem megy +2a-tól fölfelé, és Scorpionon, lefelé, és Pentagonon megy,
Scorpionon 50h-t hozzá vagyolva működik, és +3-on is, lehet csinálok egy önmódosító kódot, ha ilyen gépeken lett betöltve a program, akkor módosítsa magát.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.04. 10:26:13
Scorpionon 50h-t hozzá vagyolva működik, és +3-on is, lehet csinálok egy önmódosító kódot, ha ilyen gépeken lett betöltve a program, akkor módosítsa magát.

Bár nem sok gyakorlati jelentősége van, a sidsynth.s-ben található egy XOR A-s lapozás, amit így LD A, n-re kell módosítani, tehát kis mértékben változik az időzítés:
Code: ZiLOG Z80 Assembler
  1. ; IRQ cost = ~481 cycles
  2. ; N = (fZ80 / fIRQ - 481) / 345 = 10255.304 / fM64 - 1.394
  3.         ld      b, a
  4.         ld      de, 1
  5.         ld      hl, 0f4eh               ; 10255.304 * 256 = 280F4Eh
  6.         ld      a, 28h
  7. spdlp1  add     hl, hl
  8.         rla
  9.         sub     b
  10.         jr      nc, spdlp2
  11.         add     a, b
  12. spdlp2  ccf
  13.         rl      e
  14.         rl      d
  15.         jr      nc, spdlp1
  16.         ld      hl, 10000h - 229        ; -1.394 * 256 + 128
Itt még az önmódosító kód megoldása sem egyszerű, mert a módosítandó utasítás külön forrás file-ban van 8 példányban, és még tömörítve is. :oops: Ezért lehet, hogy fix LD A, 40h vagy LD A, 50h kell helyette, ami még lassít egy keveset a vezérlésen.

A sok extra kód miatt esetleg előfordulhat, hogy már nem marad elég hely a BA00h-BFFFh területen, de ha az ilyen gépeket csak a TAP verzió támogatja, akkor talán nem probléma, mert a TAP betöltő egyébként rövidebb.
Title: Re: SID lejátszó
Post by: geco on 2017.March.04. 11:01:18
Bár nem sok gyakorlati jelentősége van, a sidsynth.s-ben található egy XOR A-s lapozás, amit így LD A, n-re kell módosítani, tehát kis mértékben változik az időzítés:
Már működik is, épp teszteltem +3-on, most is az megy :D Szívtam vele egy keveset, mert két helyen kell patchelni, egyszer az elején, és egyszer a SidSynth kicsomagolása után :) Az időzítést itt nem módosítottam, mert csak 3 ciklussal nőtt a vezérlés, de megteszem.

Itt még az önmódosító kód megoldása sem egyszerű, mert a módosítandó utasítás külön forrás file-ban van 8 példányban, és még tömörítve is. :oops: Ezért lehet, hogy fix LD A, 40h vagy LD A, 50h kell helyette, ami még lassít egy keveset a vezérlésen.
csak a fix 50h működik, tegnap elszórakoztam pár órát a tesztelésekkel, mindegyik emu (SPecemu, ZXSpin, és Unreal debugger kezelése macerás)
A sok extra kód miatt esetleg előfordulhat, hogy már nem marad elég hely a BA00h-BFFFh területen, de ha az ilyen gépeket csak a TAP verzió támogatja, akkor talán nem probléma, mert a TAP betöltő egyébként rövidebb.
Megoldom, az is menjen ezeken a fostalicskákon is :D Amúgy nem lett olyan sokkal hosszabb a kód.
AZ MB02+ csak a tap loadert érintette, a lapozás meg 2 call a főprogramban, az ellenőrző, és cserélő bájtokat 4200h-s csomagba tettem :)
Title: Re: SID lejátszó
Post by: geco on 2017.March.04. 11:07:30
Ja, de itt a 4200-as kód a program végén van, akkor is megoldom :)
Teszteltem a +3-akat SPecemuban, és ZXSpinben, és a Scorpion 256-ot Unreal Speccyben, működnek :)
Most megnézem a TZX-et, hogy abból mit lehet kihozni.

Szerk:
Megnéztem, a 4200-as kód tényleg a végén van, de elfelejtettem, hogy a loader meg az elejére került :D
Jók vagyunk, 0bfabh a vége mindenféle módosítás nélkül :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.04. 11:11:00
Hely megtakarítása céljából egyébként a kicsomagoló rutin is cserélhető lehetne a decompress_m2_new.s módosított változatára (ami rövidebb), mivel itt nem fontos, hogy ne használja a BC', DE' és HL' regisztereket. A kimenetnek sem kellene 8K-s határon végződnie, ha ez esetleg hasznos.
Title: Re: SID lejátszó
Post by: geco on 2017.March.04. 11:40:33
Hely megtakarítása céljából egyébként a kicsomagoló rutin is cserélhető lehetne a decompress_m2_new.s módosított változatára (ami rövidebb), mivel itt nem fontos, hogy ne használja a BC', DE' és HL' regisztereket. A kimenetnek sem kellene 8K-s határon végződnie, ha ez esetleg hasznos.
Egyelőre jók vagyunk a 8k blokkos kicsomagolóval :)

Itt az új verzió , remélem nem felejtettem el minden forrást, amit módosítani kellett betenni, meg remélem egyik verzióból se felejtettem megcsinálni az új időzítést számláló megoldást. (minimális lett az eltérés)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.04. 13:38:21
meg remélem egyik verzióból se felejtettem megcsinálni az új időzítést számláló megoldást. (minimális lett az eltérés)

A sebesség számítása valójában ugyanaz maradt, mint a korábbi verzióban (a -227 helyett kellett volna -229). :) De a kis eltérés miatt 50, 60, 100, 120, 150, 200 és 250 Hz-nél ennek egyébként sincs hatása az eredményre. A +2A/+3 gépeknél akkor változna (csak 60 Hz-nél), ha átlagosan legalább 9 ciklust lassul a vezérlés. Tehát a gyakorlatban nincs különösebb jelentősége.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.04. 15:03:49
Egyelőre jók vagyunk a 8k blokkos kicsomagolóval :)

Ha esetleg mégis hasznos lenne később valamilyen célra, ez a változat 145h helyett 116h méretű, illetve a SIZE_OPTIMIZED engedélyezésével 10Dh. Bár a sebességet még nem teszteltem, és azt sem, hogy működik-e. :oops:
[attachurl=1]

A használata hasonló, de az IX helyett a HL' regisztert használja, az A helyett pedig az E'-t. Elrontja a BC, HL, BC' és D' regisztereket, az IX-et viszont nem. A blokk méret és a kezdőcím (DE) tetszőleges lehet a 3. lapon, de a kimeneti adat nem léphet át laphatárt, azaz például nem lehet a blokk első fele F000-FFFFh területen, a második fele pedig C000-CFFFh-n.

Fix blokk méret és 8K-s határig helykitöltés nélkül a tömörítés is valamivel jobb lehet, de ez csak kis különbség (sidsynth+dactable: 517 helyett 514 byte, képernyő: 1321 helyett 1310 byte).
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.04. 19:44:12
:lol:Megkérdezzem?
Én csak a két chip envelope grafikonját néztem (mert csak azt találtam), ott nem láttam eltérést.

Esetleg a legnépszerűbb vagy legpontosabb emulátor kimenetét tesztelni lehetne, ha nincs forráskód, akkor egyszerű WAV file-ba felvenni például 1 másodpercenként növekvő hangerejű hangot 0-tól 15-ig, és az alapján már lehet táblázatot készíteni.
Title: Re: SID lejátszó
Post by: geco on 2017.March.04. 20:28:21
Ha esetleg még is hasznos lenne később valamilyen célra, ez a változat 145h helyett 116h méretű, illetve a SIZE_OPTIMIZED engedélyezésével 10Dh. Bár a sebességet még nem teszteltem, és azt sem, hogy működik-e. :oops:
Sose lehet tudni, bármikor hasznos lehet :)
Esetleg a legnépszerűbb vagy legpontosabb emulátor kimenetét tesztelni lehetne, ha nincs forráskód, akkor egyszerű WAV file-ba felvenni például 1 másodpercenként növekvő hangerejű hangot 0-tól 15-ig, és az alapján már lehet táblázatot készíteni.
Oké, megkérdezem, melyik lehet a legpontosabb, vagy legnépszerűbb
Title: Re: SID lejátszó
Post by: geco on 2017.March.04. 22:21:55
Három mentést csináltam, a +3, és 128 SPECEMUval , a Scorpion Unreal Speccyvel készült, itt sajnos valahogy levettem a hangerőt még régebben, és nem tudom visszaállítani, remélem nem full nulla az utolsó pár érték.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.05. 08:22:01
Három mentést csináltam, a +3, és 128 SPECEMUval , a Scorpion Unreal Speccyvel készült, itt sajnos valahogy levettem a hangerőt még régebben, és nem tudom visszaállítani, remélem nem full nulla az utolsó pár érték.

128.wav: hasonlónak tűnik a FUSE táblázathoz (kisebb eltérések mérési pontatlanság miatt is előfordulhatnak, különösen alacsony hangerőnél, de a 13-as hangerőnél például a különbség nagyobb ennél):
Code: [Select]
     0,   288,   424,   595,   893,  1363,  1875,  2984,  3582,  5715,  7849,  9812, 12415, 15359, 18431, 21845FUSE:
Code: [Select]
     0,   300,   447,   635,   925,  1351,  1851,  2991,  3695,  5782,  7705,  9829, 12460, 15014, 18528, 21845
+3.wav: ugyanaz, mint a 128.wav

scorpion.wav: hibás a file, de a használható adat az "ayumi YM" táblázathoz hasonlít, ami jelentősen eltér a fentiektől.
Title: Re: SID lejátszó
Post by: geco on 2017.March.05. 09:01:35
Tényleg elég kicsik az eltérések, gondolom hallható különbség nincs is digi lejátszásnál.
Az a kérdés a scorpionnál, hogy azért van-e eltérés, mert az YM-es, vagy az emulátor miatt.
A 128 wav és a +3 a SPecemuval készült, nem voltam biztos benne, hogy az Amstrad nem lábalt-e át az YM-re, ezért csináltam meg mind a kettőt :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.05. 09:16:42
Az a kérdés a scorpionnál, hogy azért van-e eltérés, mert az YM-es, vagy az emulátor miatt.

Ez egyszerűen tesztelhető ha ugyanaz az emulátor AY-t is tud emulálni. De szerintem mindkettő, mert amint említettem, az ayumi YM táblázatához hasonlít. Az AY és YM között van különbség, egyébként az utóbbi van közelebb a dokumentációhoz.
Title: Re: SID lejátszó
Post by: geco on 2017.March.05. 09:30:46
Ez egyszerűen tesztelhető ha ugyanaz az emulátor AY-t is tud emulálni.
Óóó, megnéztem, és tud, győzzön az ember válogatni :D
10 fajta választási lehetőség van a volume táblák között, ebből 3-ban szerepel az YM, és kettőben az AY, én a default YM-met használtam, ezek szerint :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.05. 11:18:55
Az Unreal Speccynek a forráskódja is elérhető, legalábbis a 0.37 (http://alonecoder.narod.ru/zx/)-ben ezt találtam (nem tudom, van-e újabb):

Code: C++
  1. const SNDCHIP_VOLTAB SNDR_VOL_AY_S =
  2. { { 0x0000,0x0000,0x0340,0x0340,0x04C0,0x04C0,0x06F2,0x06F2,0x0A44,0x0A44,0x0F13,0x0F13,0x1510,0x1510,0x227E,0x227E,
  3.     0x289F,0x289F,0x414E,0x414E,0x5B21,0x5B21,0x7258,0x7258,0x905E,0x905E,0xB550,0xB550,0xD7A0,0xD7A0,0xFFFF,0xFFFF } };
  4.  
  5. const SNDCHIP_VOLTAB SNDR_VOL_YM_S =
  6. { { 0x0000,0x0000,0x00EF,0x01D0,0x0290,0x032A,0x03EE,0x04D2,0x0611,0x0782,0x0912,0x0A36,0x0C31,0x0EB6,0x1130,0x13A0,
  7.     0x1751,0x1BF5,0x20E2,0x2594,0x2CA1,0x357F,0x3E45,0x475E,0x5502,0x6620,0x7730,0x8844,0xA1D2,0xC102,0xE0A2,0xFFFF } };

Szerk.: elvileg megoldható az is, hogy a lejátszó a WOS-on mutatott módon felismerje a hang IC típusát, és automatikusan a megfelelő táblázatot használja. De lehet, hogy ez túl sokat bonyolítana a kódon vagy túl nagy méretű lenne.
Title: Re: SID lejátszó
Post by: geco on 2017.March.05. 11:36:25
Nálam is 0.37-es van, viszont találtam 0.38.3 (http://dlcorp.nedopc.com/viewtopic.php?f=27&t=1439)-at forrással együtt.
Title: Re: SID lejátszó
Post by: endi on 2017.March.05. 13:22:28
valaki csinálhatna egy jobb specys videót, mert amit a wos-on találok azok mikrofonnal felvett videót, ami hát egy zenei cucc esetén nem túl szerencsés...
Title: Re: SID lejátszó
Post by: endi on 2017.March.05. 14:31:46
ez érdekes, nem sid player, csak valami hasonló
https://www.youtube.com/watch?v=aPw9Cdot7io
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.March.05. 14:38:05
valaki csinálhatna egy jobb specys videót, mert amit a wos-on találok azok mikrofonnal felvett videót, ami hát egy zenei cucc esetén nem túl szerencsés...
Egész véletlenül azt nem azért csinálják, hogy bizonyítsák tényleg Spektrumról vagy klónról megy, nincs a háttérben valami csalás vagy ámítás?
Title: Re: SID lejátszó
Post by: endi on 2017.March.05. 14:53:24
Egész véletlenül azt nem azért csinálják, hogy bizonyítsák tényleg Spektrumról vagy klónról megy, nincs a háttérben valami csalás vagy ámítás?

ja lehet, és van is értelme
de azért a hangminőséget demonstráló videónak is lenne :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.05. 21:49:58
AY/YM felismerés és D/A táblázat választás (nem biztos, hogy jól működik):
[attachurl=1]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.06. 12:22:13
"Fejlesztői" csomag, ami hasznos lehet kgmcneil számára a WOS-on:
[attachurl=1]
Ez tartalmazza az átmeneti file-okat is, mivel itt nem futtattam a cleanup.sh-t.

A c64conv.c egyébként jelenlegi formájában nem igazán használható Windowson az stdin/stdout miatt, amelyek ott szöveges módban vannak megnyitva.

Szerk.: Windows kompatibilis c64conv.c:
Code: C
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5.   unsigned char buf[8192];
  6.   unsigned char buf2[6144];
  7.   int i, j;
  8.   FILE *f = fopen(argv[1], "rb");
  9.   fread(buf, 1, 8192, f);
  10.   fclose(f);
  11.   for (i = 0; i < 4096; i++) {
  12.     j = 0x0800 + ((i & 7) << 8) + ((i & 0x07F8) >> 3) + (i & 0x0800);
  13.     buf2[i] = buf[j];
  14.   }
  15.   for (i = 0; i < 2048; i++)
  16.     buf2[i + 4096] = buf[i + 6144];
  17.   f = fopen(argv[2], "wb");
  18.   fwrite(buf2, 1, 4096 + 768, f);
  19.   fclose(f);
  20.   return 0;
  21. }

És a használata:
Code: [Select]
.\epcompress.exe -raw -m2 -x sidm2.scr tmp.bin
gcc -Wall -O2 c64conv.c -o c64conv.exe -s
.\c64conv.exe tmp.bin sidc64.scr
Title: Re: SID lejátszó
Post by: geco on 2017.March.06. 13:13:03
De gyors vagy :) Én még ott jártam, hogy láttam reggel, de őrültek háza van, és nem volt időm keresgélni :)
Title: Re: SID lejátszó
Post by: geco on 2017.March.06. 19:10:23
AY/YM felismerés és D/A táblázat választás (nem biztos, hogy jól működik):
Szerintem jól, EP128emu, SPecemu, ZXSpin AY lett, UnrealSPeccy meg YM, ha a fejem tetejére is álltam, hiába állítottam át kétféle AY-ra, akkor is YM lett, akkor jutott eszembe, hogy csak a volume table-t állítom, magát az emulációt nem :ds_icon_cheesygrin:
Pár apróságot módosítottam, a kódhoz nem nyúltam, csak megnéztem mi változott, a SHell scriptben, de ott is legfőképp neveket, betettem az eredeti SCR-t (igaz a csonkított verziót találtam meg), és újrafordítottam a tzx-et is, mert gyanús volt, hogy a tap verzió volt benne, meg megcsináltam a tap-ot is.
Title: Re: SID lejátszó
Post by: geco on 2017.March.07. 08:28:47
FtankT kérdezte a WOS-on, hogy nem tervezzük-e, hogy a források kikerüljenek Github-ra.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.07. 10:13:35
Már van Git (https://github.com/istvan-v/sidbasic), de egyelőre még nem töltöttem fel semmit.
Title: Re: SID lejátszó
Post by: geco on 2017.March.07. 10:21:43
Már van Git (https://github.com/istvan-v/sidbasic), de egyelőre még nem töltöttem fel semmit.
Okie, akkor szórom az infót a WOS-ra :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.07. 11:59:26
Feltöltöttem a konvertáló programokat és a sidbasicSP-t, bár az utóbbi még nincs kész, egyelőre csak a TZX verziót fordítja, hamarosan beépítem a TAP változato és az esetleges frissítéseket.

Linuxon egyszerű "make" parancs fordít mindent ha az ep128emu, plus4emu és sidbasic Git mind egy könyvtár alatt található:

git clone https://github.com/istvan-v/ep128emu.git
git clone https://github.com/istvan-v/plus4emu.git
git clone https://github.com/istvan-v/sidbasic.git

cd sidbasic/sidconv
make
cd ../sidbasicSP
make
Title: Re: SID lejátszó
Post by: geco on 2017.March.07. 13:19:23
Feltöltöttem a konvertáló programokat és a sidbasicSP-t, bár az utóbbi még nincs kész, egyelőre csak a TZX verziót fordítja, hamarosan beépítem a TAP változato és az esetleges frissítéseket.
TAP verzióra is csinálsz egy C programot?
Gondolom kisebb módosítása lesz a TZX készítőnek.
Amúgy én eddig úgy csináltam, hogy megcsináltam a TZX-et a TAP-os verzióból (de csak akkor ha a loader is változott), és Block editorral bemásoltam a betöltőt a TAP-ba, majd csináltam egy broken adatblokkot, és betöltöttem a TAP verziós fordított binárist.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.07. 15:32:07
Továbbfejlesztett tapeenc készül, támogat TAP formátumot és betöltő nélküli kimenetet is (M64 konvertáláshoz).
Title: Re: SID lejátszó
Post by: geco on 2017.March.07. 15:33:38
Továbbfejlesztett tapeenc készül, támogat TAP formátumot és betöltő nélküli kimenetet is (M64 konvertáláshoz).
Nagyon profi :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.07. 15:41:16
A Git frissítve, de még nem teszteltem különösebben, hogy vannak-e új hibák. :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.March.07. 16:13:45
A Git frissítve, de még nem teszteltem különösebben, hogy vannak-e új hibák. :oops:
Eddig se volt, legalábbis abban, amit te csináltál, bezzeg, amit én :D
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.07. 17:23:39
Az új tapeenc verzió használata:

Usage: ./tapeenc OUTFILE.TZX NAME LOADER.BIN [ID1 INFILE1 [...]]
       ./tapeenc -tap OUTFILE.TAP NAME LOADER.BIN [INFILE1 [...]]
       ./tapeenc -noldr OUTFILE.TZX ID1 INFILE1 [ID2 INFILE2...]
       ./tapeenc -tap -noldr OUTFILE.TAP NAME INFILE1 [...]


Példa:

./tapeenc -noldr paperboy.tzx 0x364D ../m64/paperboy-02.m64
./tapeenc -tap -noldr paperboy.tap paperboy ../m64/paperboy-02.m64
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.15. 09:31:04
tapeenc Git verzió 32 bites Windowsra:
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.March.15. 12:39:35
tapeenc Git verzió 32 bites Windowsra:
(Attachment Link)
Megosztottam a WOS-on :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.16. 16:48:02
Megosztottam a WOS-on :)

Úgy látom, a régi (nem GitHub) forráskód lehetett a probléma. Jelenleg így fordítható (a make ezeket a parancsokat futtatja):

Code: [Select]
g++ -Wall -O2 tapeenc.cpp -o tapeenc -s
sjasm loader.s loader.out
SjASM Z80 Assembler v0.39g6 - www.xl2s.tk
Pass 1 complete (0 errors)
Pass 2 complete
Errors: 0
sed -e 's/USE_ROM_LOADER[[:space:]]\+equ[[:space:]]\+[01]/USE_ROM_LOADER equ 0/' < sidbintSP.s > sidbintSP_tzx.s
g++ -Wall -O2 -DUSE_DACTABLE_AY ay_da_opt.cpp -o ay_da_opt -lm -s
./ay_da_opt 249
Distortion = 3.714%
g++ -Wall -O2 -DUSE_DACTABLE_YM ay_da_opt.cpp -o ym_da_opt -lm -s
./ym_da_opt 247
Distortion = 4.291%
sjasm sidsynth.s sidsynth.bin
SjASM Z80 Assembler v0.39g6 - www.xl2s.tk
Pass 1 complete (0 errors)
Pass 2 complete
Errors: 0
../../ep128emu/epcompress -raw -m2 -6 sidsynth.bin sidsynth.bin
Compressing data
  100%
gcc -Wall -O2 c64conv.c -o c64conv -s
../../ep128emu/epcompress -raw -m2 -x sidm2.scr sidc64.scr
./c64conv sidc64.scr sidc64.scr
sjasm cod47scr.s cod47scr.bin
SjASM Z80 Assembler v0.39g6 - www.xl2s.tk
Pass 1 complete (0 errors)
Pass 2 complete
Errors: 0
../../ep128emu/epcompress -raw -m2 -6 cod47scr.bin cod47scr.bin
Compressing data
  100%
sjasm sidbintSP_tzx.s sidbintSP_tzx.out
SjASM Z80 Assembler v0.39g6 - www.xl2s.tk
Pass 1 complete (0 errors)
Pass 2 complete
Errors: 0
./tapeenc sidbasicSP.tzx SIDBASIC loader.out 0x4253 sidbintSP_tzx.out
sjasm taploader.s taploader.out
SjASM Z80 Assembler v0.39g6 - www.xl2s.tk
Pass 1 complete (0 errors)
Pass 2 complete
Errors: 0
sed -e 's/USE_ROM_LOADER[[:space:]]\+equ[[:space:]]\+[01]/USE_ROM_LOADER equ 1/' < sidbintSP.s > sidbintSP_tap.s
sjasm sidbintSP_tap.s sidbintSP_tap.out
SjASM Z80 Assembler v0.39g6 - www.xl2s.tk
Pass 1 complete (0 errors)
Pass 2 complete
Errors: 0
./tapeenc -tap sidbasicSP.tap SIDBASIC taploader.out sidbintSP_tap.out
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.March.17. 07:59:44
A mindenféle SID lejátszó verzió most már véglegesnek tekinthető?
Ha igen, akkor lehetne kérni "felhasználói kézikönyvet" is? :oops: sinclair.hu-n is kérdezik: van ennek a SIDBasicnek valami leírása is valahol?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.17. 09:33:59
Pontosan mikről kellene részletesebb leírást készíteni? A konvertáló programok fordításáról, a konvertálásról, az EP-s lejátszó használatáról, a Spectrum lejátszó fordításáról, a használatáról, vagy Spectrumra konvertálásról (M64->TAP/TZX)? Esetleg a többi EP-s lejátszóról?

A mindenféle SID lejátszó verzió most már véglegesnek tekinthető?

Szerintem többé-kevésbé igen, esetleg a Spectrumos D/A táblázatok lehetnének még jobbak is. :oops: De ezeknek az optimalizálása nem változtatna a használaton. Talán az EP-s SIDBASIC is futhatna még 10 kHz-nél valamivel magasabb frekvencián, vagy memóriabővített gépekre lehetne olyan változata, amely kicsomagolja az egész bemenetet, bár nem tudom, érdemes lenne-e még ezekkel foglalkozni, a lejátszó már most is jól használható.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.17. 16:52:32
sinclair.hu-n is kérdezik: van ennek a SIDBasicnek valami leírása is valahol?

Egyelőre a WOS fórumon (https://www.worldofspectrum.org/forums/discussion/54160/c64-sid-player-coming-soon-to-specy-128) található információ, és természetesen itt is.

A Spectrumos lejátszó és konvertált file-ok megtalálhatók Geco csomagjában (https://enterpriseforever.com/sound/sid-lejatszo/msg62722/#msg62722), illetve ez a GitHub verzió lefordítva:
[attachurl=1]
[attachurl=2]
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.March.17. 22:14:57
Pontosan mikről kellene részletesebb leírást készíteni? A konvertáló programok fordításáról, a konvertálásról, az EP-s lejátszó használatáról, a Spectrum lejátszó fordításáról, a használatáról, vagy Spectrumra konvertálásról (M64->TAP/TZX)? Esetleg a többi EP-s lejátszóról?
A konvertálás és használat. Szét van szórva sok hozzászólásban, praktikus lenne egy helyre (mondjuk a wikire) összeszedni a végleges verziót.

Quote
Talán az EP-s SIDBASIC is futhatna még 10 kHz-nél valamivel magasabb frekvencián
Ha lehet még javítani a minőségen, akkor az jó lenne!

Quote
vagy memóriabővített gépekre lehetne olyan változata, amely kicsomagolja az egész bemenetet
Ha nem kéne menet közben tömörítgetni, akkor az jelentősebb frekvencia növelést tenne lehetővé?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.18. 09:15:09
Ha nem kéne menet közben tömörítgetni, akkor az jelentősebb frekvencia növelést tenne lehetővé?

Nem sok időt fogyaszt, talán egy-két százalék, bár közvetve gyorsulást eredményezhetne például az, ha a vezérlés a főprogramba kerülne (-25 ciklus az IRQ rutinban). Az előre kicsomagolás hátránya azonban, hogy lejátszás előtt az egészet meg kell várni, és 128K-s gépen csak kb. 2 perc számára van elég hely.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.18. 11:15:50
Az EP-s SIDBasic csomagjában egyébként már található leírás az Olvassel.txt és Readme.txt-ben, a konvertáló programokról is (amelyeket szintén tartalmaz). A Spectrumos lejátszóról még nincs összegyűjtve minden információ, de annak egyszerű a használata: a lejátszó betöltése után általában külön .tap vagy .tzx a zene (de össze is fűzhetők), billentyű lenyomására tölti a következőt. Probléma lehet még esetleg az aktuális verziót megtalálni. :)

Spectrumra konvertálásnál érdemes még említeni, hogy csak 12 blokk hosszúságú zene lejátszására van lehetőség, többet is be lehet ugyan tölteni, de a lejátszhatatlan rész elveszik. A 12 blokk a gyakorlatban 2:43.27 időtartamot jelent 50 Hz-es PAL megszakítást használó zenéknél (azaz a PSID file-ok nagy többségénél). Tehát ennél hosszabb zene Spectrumon csak a file méretét növeli. 12 blokkra rövidítéshez használható az m64trunc (https://enterpriseforever.com/sound/sid-lejatszo/msg62684/#msg62684) segédprogram.

EP-n csak a tömörített méret a lényeges, az M64 file legfeljebb 5F10h byte hosszúságú lehet, ennél nagyobbat a sid_conv jelenleg nem is készít.

TAP vagy TZX készítésére a tapeenc segédprogram használható, például:

Csak zene:
Code: [Select]
tapeenc -tap -noldr garfield.tap GARFIELD GARFIEL.M64
tapeenc -noldr garfield.tzx 0x364D GARFIEL.M64

Csak lejátszó (TAP):
Code: [Select]
tapeenc -tap sidbasicSP.tap SIDBASIC taploader.out sidbintSP_tap.out
A TAP file-ok egyszerűen binárisan összefűzhetők, például Windowson a COPY /B paranccsal.

Lejátszó + zenék (TZX):
Code: [Select]
tapeenc sidbasicSP.tzx SIDBASIC loader.out 0x4253 sidbintSP_tzx.out 0x364D file1.m64 0x364D file2.m64
[attachurl=1]
[attachurl=2]
[attachurl=3]
[attachurl=4]

Szerk.: a konvertláláson még lehetne fejleszteni olyan programmal, ami PSID-ből azonnal M64-et készít, az átmeneti RAW formátum kihagyásával.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.March.19. 09:48:33
A Plus4worldön is átütötte az ingerküszöböt (http://plus4world.powweb.com/forum/33971) a lejátszó. És továbbra is gratula! :smt023
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.19. 10:32:19
Még Plus/4-es változattal is lehetne próbálkozni, bár ott viszonylag népszerű a SID kártya.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.March.19. 12:39:44
Még Plus/4-es változattal is lehetne próbálkozni, bár ott viszonylag népszerű a SID kártya.
/OFF
A TED gyászos képességei a hangképzés terén azért eléggé bekorlátozzák az elérhető minőséget. Ugyan ki lehet csiholni belőle 100+ jelszintet, de közel lineáris sort csak húsz-harminc eleműt lehet ebből kiválogatni, vagy legalábbis nekem ennyi tűnik reálisnak. Az meg még elég harmatos a nyitott képpel elérhető mintavételi frekvencia mellett, és még kvantálási zaj is marad benne elég bőven.

Talán inkább egy DAC-ot kellene rászúrni a User Portra, azon mehetne 8 biten is. (Mellesleg láttam már C64-hez pont ilyet, azt kellene átdrótozni, és mehetne 2x2 csatornán. Csak minek. :mrgreen:)
/ON
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.19. 13:00:36
Egyelőre ez a hangminta lejátszó rutin, de ez valószínűleg nem optimális megoldás: :oops:
[attachurl=1]        (szerk.: valamivel gyorsabb verzió, 11 kHz-nél még nem fagy le, de idő sem marad)
[attachurl=2]

Kikapcsolt képernyőnél is már kb. 10 kHz-es frekvenciánál lefagy, tehát a gyakorlatban 7.8 lehetne használható ezzel (2 soronként megszakítás), ahol egyébként a frekvencia konverzió is egyszerűbb. Az aktív képernyőtől tovább lassulna, és az a hangminták időzítési hibáját (jitter) is növelné.

Jelenleg tartalmaz gyűrűmodulációt (amit a zenék többsége nem használ), és az EP-shez hasonló megoldáshoz készült: időzítő megszakításban a hangminta lejátszás, 50 Hz-es megszakításban a vezérlés, és a főprogramban a kicsomagolás. A Spectrumos módszerrel gyorsabb lehetne, de annak is vannak hátrányai. Bár az előre kicsomagolás 64K-s gépen nem lenne jó használható hosszúságú lejátszáshoz. :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.19. 22:31:48
A Plus4worldön is átütötte az ingerküszöböt (http://plus4world.powweb.com/forum/33971) a lejátszó. És továbbra is gratula! :smt023

MMS kérdésére:
Quote
I suppose it works in the same way as the DigiSID player on Plus/4, and probably the ZX Spectrum had a little more processor power to execute the program than Plus/4 (when srceen is on). Actually I do not know, how he made it on AY, as it has no real PCM, and the volume control also only 16 resolution, and it should sound worse than a 4bit DAC. But it sounds like a 6 or 7 bit DAC. Or he may wrote a Viterbi routine to combine the three AY channel into one proper sound frequency?

AY-n alapvetően egyszerű a D/A kimenet, ha egy csatornán a négyszögjel és a zaj közül egyik sem engedélyezett, akkor folyamatosan logikai 1 a kimenet, tehát ez a "DAC mód". A hanggenerátorok az alapértelmezés szerint magas kimenetet lehúzhatják nullára, ezért az ugyanazon a csatornán egyszerre engedélyezett négszögjel és zaj között AND művelet történik.

A SIDBasicSP a mixer regisztert 3Fh értékre állítja, azaz mindegyik csatorna kimenete fix magas szint, és a három hangerő regisztert táblázatok alapján állítja. 0 és 191 között minden hangminta értékhez három 4 bites hangerő (A, B, C) tartozik, az AY nem lineáris hangerő szabályozása teszi lehetővé a nagyobb felbontást, de az eredmény nem tökéletes, a táblázatok optimalizálásán még lehetne javítani. Külön táblázatok készültek az egyes Spectrum klónokban található YM2149-hez, ezt az IC-t a lejátszó automatikusan felismeri.

AY:
[attachthumb=1]
YM:
[attachthumb=2]

A hullámformán látható kiugrások a (Spectrumon meglehetősen lassú) regiszter írások közötti állapotokban keletkeznek, természetesen ezek is rontják a minőséget. A táblázatokat készítő program kompromisszumot próbál találni a jobb felbontás és a kevésbé "tüskés" kimenet között, ez nehezíti az optimális megoldás keresését.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.20. 10:14:41
A TED gyászos képességei a hangképzés terén azért eléggé bekorlátozzák az elérhető minőséget. Ugyan ki lehet csiholni belőle 100+ jelszintet, de közel lineáris sort csak húsz-harminc eleműt lehet ebből kiválogatni, vagy legalábbis nekem ennyi tűnik reálisnak.

Egyelőre még az sem tűnik egyértelműnek, hogy a 100 szint hogyan érhető el bonyolultabb trükkök nélkül, nekem csak 33-at sikerült egyszerű $FF11 írással: :oops:
Code: [Select]
 0:  0.0000000
 17:  0.0172128
 33:  0.0347485
 18:  0.0469687
 49:  0.0526324
177:  0.0705558
 19:  0.0770507
 34:  0.0946026
 20:  0.1073525
 21:  0.1379074
 50:  0.1430263
 35:  0.1550731
 22:  0.1687072
178:  0.1916032
 23:  0.1998841
 36:  0.2161025
 24:  0.2282312
 51:  0.2348493
 37:  0.2778221
179:  0.3152601
 52:  0.3285998
 38:  0.3404048
 39:  0.4040195
 53:  0.4249243
180:  0.4427064
 40:  0.4622360
 54:  0.5244000
181:  0.5752702
 55:  0.6277162
182:  0.7141309
 56:  0.7244418
183:  0.8606520
184:  1.0000000

[attachthumb=1]

A többi regisztert is állítva talán több lehetne (itt a csatornák frekvenciája fix $3FD és $3FE), és abban sem vagyok biztos, a valódi gépen van-e különbség a két csatorna között. A nagyobb szinteknél egyre rosszabb a felbontás, az utolsókat célszerűbb lehetne nem használni.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.March.20. 11:39:21
Egyelőre még az sem tűnik egyértelműnek, hogy a 100 szint hogyan érhető el bonyolultabb trükkök nélkül, nekem csak 33-at sikerült egyszerű $FF11 írással: :oops:
Erre (http://plus4world.powweb.com/ma.php?maid=1550) az egykori levelezési listán megjelent hozzászólásra gondoltam. Azt nem állítom, hogy ezek mind jól elkülönülnének.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.20. 11:55:47
Bár a szintek nem pontosan ugyanazok, az ott található táblázat is hasonlónak tűnik, nincs 100 különböző szint, 46 után 52 következik, majd 58, 63, 72, 86 és 100 (a 99-100 eltérés zaj lehet), ami gyakorlatilag megegyezik az én táblázatommal. De ha nem csak egyszerű $FF11 írás lenne, akkor talán többet is el lehetne érni, ami azonban bonyolítaná a hangminta lejátszást.
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.March.20. 16:41:44
Bár a szintek nem pontosan ugyanazok, az ott található táblázat is hasonlónak tűnik, nincs 100 különböző szint, 46 után 52 következik, majd 58, 63, 72, 86 és 100 (a 99-100 eltérés zaj lehet), ami gyakorlatilag megegyezik az én táblázatommal. De ha nem csak egyszerű $FF11 írás lenne, akkor talán többet is el lehetne érni, ami azonban bonyolítaná a hangminta lejátszást.
/OFF
Én nem a százalék oszlopra gondoltam, hanem a teljesítményre. Ugyan nem értek hozzá, de az alapján amit a szerző leírt hogy mit és mennyit művészkedett az adatgyűjtéssel én el tudom képzelni, hogy tényleg elkülönülnek még azok a szintek is, amiknél csak egy vagy kettő az eltérés. Nyilván, ez legfeljebb annyira lehet jó, hogy szerencsés esetben finomhangolni lehet vele a linearitást.

Egyébként egyszer eltöprengtem, hogy működhetne-e, ha a frekvencia regiszterek irkálásával (2x$3FD|$3FD+$3FE|2x$3FE) próbálnánk növelni a lehetséges jelszintek számát? Csak hát valószínűleg ez is hasonló tüskéket eredményezne, mint a Spectrumon a három csatorna jelszintjeinek összegzésével kiterjesztett mintafelbontás.
/ON
Title: Re: SID lejátszó
Post by: balagesz on 2017.March.20. 17:13:33
Egyébként egyszer eltöprengtem, hogy működhetne-e, ha a frekvencia regiszterek irkálásával (2x$3FD|$3FD+$3FE|2x$3FE) próbálnánk növelni a lehetséges jelszintek számát?

Ezekkel a beállításokkal egyszer régen én is próbálkoztam... A kisebb érték egy olyan frekvencia, ami már nem hallható tartományban szól. (>20KHz) Viszont a nagyobb értékre a TED aktuális hanggenerátora kvázi "kiakad", emiatt gyakorlatilag DC szintet produkál. Viszont ez a "kiakadás" nem azonnali; olyan mintha ettől leállna valamilyen regiszter-frissítés, majd egy idő után "elveszne" a benne levő érték. De ez ugye időbe telik. Emiatt ennek az értéknek a kapcsolgatása nem biztos, hogy azt az eredményt hozná, amit az ember elképzel. :) De ezek ködös emlékek, fixme ha valamivel összekevertem... :oops:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.20. 20:09:52
Ez valamennyire már működik:
[attachurl=1]
[attachurl=2]    (M64 adat nélkül lefagy)

Egyelőre nincs rendes file kezelés, az M64-et egyszerűen hozzá kell fűzni a PRG-hez, például így:
[attachurl=3]
Title: Re: SID lejátszó
Post by: balagesz on 2017.March.20. 21:33:57
Ez valamennyire már működik:
(Attachment Link)

Ezt mivel lehet lefordítani? :) (A "kedvenc" assemblerem nem eszi. :oops: ) Amúgy egész jól szól!
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.20. 22:13:47
Ezt mivel lehet lefordítani? :) (A "kedvenc" assemblerem nem eszi. :oops: )

CA65 (http://www.cc65.org/doc/ca65.html):

ca65 --target none p4sidsynth.s -o tmp.o
ld65 --target none tmp.o -o p4sidsynth.prg
cat m64/Gray_Matt/LASTNIN0.M64 >> p4sidsynth.prg
Title: Re: SID lejátszó
Post by: balagesz on 2017.March.20. 22:48:56
Ez a CA65 a jelek szerint a CC65 része. Lejött, kérdés nélkül lefordult, működik. Köszi! :cool:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.21. 13:26:28
Kezdetleges file kezelés és kisebb optimalizálások (most már 10 kHz a lejátszási frekvencia itt is):
[attachurl=1]
[attachurl=2]
Még nem tökéletes, vannak javítandó hibák, és valószínűleg optimalizálni is lehetne még. Csak 50 Hz-es (PAL) file lejátszását támogatja.

D64 verzió:
[attachurl=3]

Az FLOAD32 és HYPALOAD1551 turbós betöltéshez használható, az előbbi 1541-nél. Ezeknél lehetnek jobbak is, fontos azonban, hogy elférjenek az $F800-$FCFF területen. A lejátszó először a SIDFILE1.PRG-t tölti be, aztán a SIDFILE2.PRG-t, és így tovább, a kilencedik után újra az elsőt. A file formátum ugyanaz, mint EP-n, csak PRG-re átnevezve.

A lejátszás közben használható billentyűk:
- Stop, Q: kilépés
- Space, C=: következő file
- Home, 1: első file

Szerk.: egyes zenéknél (pl. Paperboy) javítaná a minőséget a pulseTable invertálása, aszimmetrikus négyszögjelnél előnyösebb, ha gyakoribb a 0 szint, mert a D/A felbontása romlik a kimeneti szint növekedésével. Természetesen ugyanez a változtatás más zenéknél viszont rosszabb is lehet. :)

Szerk. 2: 8 bites DAC móddal is próbálkoztam, ami közben plus4emu bugot találtam. :oops: A SID külső bemenete nem volt engedélyezett, ezért nem működött a DigiBlaster (a Git forráskódban már javítva, az ezzel készült snapshot a hibás verzióban is engedélyezi a hangot).
[attachurl=4]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.22. 10:21:53
A fenti Plus/4-es lejátszó még működne 11084 Hz frekvencián, bár nem tudom, mennyire megbízhatóan. További növelésnél ($4d-$4e frekvencia) már hibás, és a kicsomagolás így már másodpercekig tart, tehát ha az utolsó blokk ennél rövidebb, akkor a zene újraindulásakor hiba lehet (ami azonban talán javítható). A táblázatos frekvencia konverzió egyébként hasznos lehetne az EP verzióban is.

Szerk.: 11 kHz-es változat, ebben a pulseTable is invertált:
[attachurl=1]
[attachurl=2]
Title: Re: SID lejátszó
Post by: balagesz on 2017.March.22. 23:25:03
Szerk.: egyes zenéknél (pl. Paperboy) javítaná a minőséget a pulseTable invertálása, aszimmetrikus négyszögjelnél előnyösebb, ha gyakoribb a 0 szint, mert a D/A felbontása romlik a kimeneti szint növekedésével. Természetesen ugyanez a változtatás más zenéknél viszont rosszabb is lehet. :)

Mint laikus kérdezném: ezt nem lehet megoldani automatikusan már a konvertálásnál? Gondolom a táblába mentve van a kitöltési tényező, ami ha nagyobb mint 50%, akkor az értékét automatikusan át lehetne forgatni 50% alá. :)
Title: Re: SID lejátszó
Post by: geco on 2017.March.23. 15:07:37
Egész jó lett a +4 verzió is :) Egy picit mintha tompább lenne, meg zajosabb, de szerintem nagyságrendekkel jobban szól, mint a régebbiek, amiket hallottam.
Mondjuk csak a lemezen lévőt próbáltam eddig ki.
Title: Re: SID lejátszó
Post by: geco on 2017.March.23. 15:47:25
Sőt, a legújabb verzió nem tűnik rosszabnak, vagy csak nagyon picit, mint a Speccys verzió, tök jó lett, pláne ahhoz képest, hogy csak 31 volume szinttel dolgozik :)
Nem lehetne +4-en native SID kód lejátszás mellett is megcsinálni ugyanezt?
Csak azért kérdem, mert úgy gondolom, hogy maga a zene lejátszó kód nem eszik sokkal több időt általában , mint maga a kicsomagoló rutin, de lehet rosszul gondolom. (bár belegondolva, hogy a zenevezérlő kód legalább minden 1/50 másodpercben tutira lefut, összességében többet eszik. )
Title: Re: SID lejátszó
Post by: endi on 2017.March.23. 16:32:41
videót kérünk! mindenről! :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.23. 19:50:23
Mint laikus kérdezném: ezt nem lehet megoldani automatikusan már a konvertálásnál? Gondolom a táblába mentve van a kitöltési tényező, ami ha nagyobb mint 50%, akkor az értékét automatikusan át lehetne forgatni 50% alá. :)

Erre a lehetőségre is gondoltam, bár nem tudom, ez rontaná-e a hangot (de ha így is lenne, a DAC felbontása valószínűleg nagyobb probléma :)). Az alábbi verzióban még nincs ilyen, de a következőbe megpróbálom majd ezt is beépíteni.

Sőt, a legújabb verzió nem tűnik rosszabnak, vagy csak nagyon picit, mint a Speccys verzió, tök jó lett, pláne ahhoz képest, hogy csak 31 volume szinttel dolgozik :)

A Spectrumoshoz képest előnye is van, magasabb a mintavételezési frekvencia (most 11084 Hz, ami a CPU idő nagy részét el is fogyasztja), és az EP-shez hasonlóan megszakítás alapú a lejátszás, amivel elkerülhető a zavaró 50 Hz-es torzítás. Tehát a zenétől függően jobb is lehet.

Quote
Nem lehetne +4-en native SID kód lejátszás mellett is megcsinálni ugyanezt?

PSID file legyen lejátszható konvertálás nélkül? Itt ugyan kompatibilis a CPU, tehát elvileg meg lehetne oldani, de problémás lehet például a memória kezelés, a hangminta táblázatok mellett nem biztos, hogy marad elég hely amit a PSID-ek nem írnak felül. Bár a jelenlegi verzióban is kb. 40K van fenntartva a bemeneti file és a puffer számára, csak a PSID-ek nem mindig ugyanazt a területet használják. Természetesen így a burkológörbe emulációt is a lejátszónak kellene megoldania.

Quote
Csak azért kérdem, mert úgy gondolom, hogy maga a zene lejátszó kód nem eszik sokkal több időt általában , mint maga a kicsomagoló rutin, de lehet rosszul gondolom. (bár belegondolva, hogy a zenevezérlő kód legalább minden 1/50 másodpercben tutira lefut, összességében többet eszik. )

Az file függő lehet, hogy a PSID zenék mennyi CPU időt fogyasztanak, de így mindenesetre bonyolultabb lenne a vezérlés, mert emulálni kellene a burkológörbéket. A mostani változatban kb. 90% a hangminta megszakítás CPU használata, a maradék időben fut minden egyéb, de a 11 kHz-es frekvencia feladásával több idő lenne.

Új D64 verzió:

Itt próbálkoztam a kód gyorsításával a vezérlést a főprogramba helyezve, mivel csak minimális időt hagy a megszakítás, az így megtakarított 6 ciklus sem jelentéktelen (törölhető lehetne még a keretcsíkozás is, ami további 4 ciklus). De ennek hátránya is van, folyamatosan figyelni kell a video megszakításra, kicsomagoláskor még sorozatok másolása közben is, és ilyenkor rosszabb a zene időzítése (18.5-21.5 ms közötti idők fordulnak elő stabil 20 ms helyett). Talán visszaállítom a korábbi (egyszerűbb) megoldást és törlöm a keret effektust.

Szerk.: ez a verzió hibás volt a turbós betöltők használatakor, a kernal rutinokkal való "takarítás", bár rövidebb, elrontja ezeket. :oops:

Lehetne még optimalizálni nem dokumentált utasításokkal is, de nem tudom, megbízhatóak-e valódi gépen.
Title: Re: SID lejátszó
Post by: geco on 2017.March.24. 08:45:07
PSID file legyen lejátszható konvertálás nélkül? Itt ugyan kompatibilis a CPU, tehát elvileg meg lehetne oldani, de problémás lehet például a memória kezelés, a hangminta táblázatok mellett nem biztos, hogy marad elég hely amit a PSID-ek nem írnak felül. Bár a jelenlegi verzióban is kb. 40K van fenntartva a bemeneti file és a puffer számára, csak a PSID-ek nem mindig ugyanazt a területet használják. Természetesen így a burkológörbe emulációt is a lejátszónak kellene megoldania.
Jogos, erre nem gondoltam. A tippem az volt, hogy a SID-ek nagy része 15% alatti CPU-t használ, de mivel +4-en kikapcsolt kép mellett (ha jól tudom ) 1,7x-es a sebessége a C64-ének, ezért ennek simán mennie kéne, csak az a fránya memória probléma ne lenne.
Jól emlékszem, hogy a kód relokálást a SID lejátszó végzi, mert ebben az esetben lehetne olyan helyre generálni a táblákat, ami nincs használatban, mondjuk ennek is megvan a veszélye, hogy a program futás közben piszkít oda, és a másik, ha jól láttam, akkor +4-en a kód FC00-FFFFh között van, oda is kerülhet SID kód. Úgy érzem nem is érdemes tovább feszegetni ezt. :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.24. 09:25:09
Jelenleg ez a memória használat:

$0008-$006A: IRQ rutin (az eredetileg itt található adatról másolat készül)
$00D0-$00E8: változók
$0C00-$0C9B: kicsomagoló rutin munkaterülete
$0D00-$0DFF: hangerő/hullámforma byte konvertáló táblázat (a megfelelő hangminta táblázat kezdőcímét tartalmazza, vagy nullát négyszögjel esetén)
$0E00-$0FFF: frekvencia konvertáló táblázat, a 8 bites index szorzása 178-al
$1001-$15FF: főprogram
$1600-$2AFF: háromszögjel hangminták (21 hangerő 3 és 63 között, a többi hullámformánál is)
$2B00-$3FFF: fűrészjel hangminták
$4000-$7FFF: 2 * 8K puffer (tömörítetlen M64 adat)
$8000-$DEFF: bemeneti file a fejléc nélkül
$DF00-$F3FF: zaj hangminták
$F400-$F5FF: négyszögjel táblázat (a PWM-et a kezdőcím mozgatása valósítja meg, a hangerőt pedig AND utasítás)
$F600-$F6BF: D/A táblázat, $FF11-re írandó érték minden kimeneti szinthez
$F708-$F76A: a nullás lap másolata
$F800-$FCFF: fenntartva a turbós betöltők számára

A főprogram által használható kis terület már most is probléma, a kód egy részét más területre kellene másolni, hogy ne legyen a teljes mérete ~1530 byte-ra korlátozva, de a dacTable tömörítésével (192 -> 80 byte) is lehetne kb. 100 byte helyet megtakarítani. A 21 hangerő szint talán túl sok a DAC lehetőségeit figyelembe véve, de ennyinek találtam helyet. :)

Úgy érzem nem is érdemes tovább feszegetni ezt. :)

Nem rossz ötlet, csak valószínűleg nem minden PSID működne (tesztelni kellene, hol van a legnagyobb terület, amit általában nem használnak), és az M64-es verzióhoz képest a minőség is romlana valamennyit. Viszont nem kellenének konvertált file-ok, az eredeti PSID-ek kisebbek is.
Title: Re: SID lejátszó
Post by: geco on 2017.March.24. 10:21:42
Nem rossz ötlet, csak valószínűleg nem minden PSID működne (tesztelni kellene, hol van a legnagyobb terület, amit általában nem használnak), és az M64-es verzióhoz képest a minőség is romlana valamennyit. Viszont nem kellenének konvertált file-ok, az eredeti PSID-ek kisebbek is.
Igen, és elég sok kompromisszummal járna, az egyetlen előnyéhez képest, ha maradhatna a 11KHz-es lejátszás, akkor szerintem nem sokat romlana a minőség, viszont hatalmas munka lenne feltérképezni, hogy mely területeket használják legkevésbé a SID-ek, erre lehetne jó, a dinamikus tábla allokálás, aztán az önmódosító kód, de szerintem ez se lenne 100%-os megoldás, ráadásul iszonyat munka. :( A SPEmuból indultam ki, ott legalább 300 TAP-ot néztem végig, és még így is jött bőven olyan file, ami más utasításkombót használt portírásra, itt meg jöhet bőven olyan SID, ami a kiszemelt területre piszkít.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.24. 10:27:30
viszont hatalmas munka lenne feltérképezni, hogy mely területeket használják legkevésbé a SID-ek

Ez valójában egyszerű lenne a sid_dump.cpp módosított változatával, amely egy 64K méretű file-ban tárolja azt, hogy melyik címekre történt írás, és több futásnál betölti az előző kimenetet. Csak attól tartok, nagyobb számú SID file után nem sok hely maradna érintetlenül, de ezt a legjobb lenne kipróbálni. :oops: Természetesen az $FD00-$FF3F terület írása is probléma, C64-en ide RAM lapozható, Plus/4-en viszont itt mindig I/O regiszterek találhatók.

Szerk.: ez a sid_dump verzió a "mem_map.bin" file-ba írja a futása során használt memória térképét (00=szabad, FF=felülírva), több file konvertálásakor a már meglevő mem_map.bin frissítődik:
[attachurl=1]    (bug javítva: az előző állapot minden zenénél elveszett :oops:)

Szerk. 2: egy régebbi SIDPLAY csomagban található 37 file alapján ez lett az eredmény, de néhány file kizárásával valószínűleg lehetne jobb is:
Code: [Select]
00000000  00 ff ff ff ff ff 00 00  00 00 00 00 00 ff ff ff  |................|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000090  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff 00 00  |................|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000b0  00 00 ff ff ff 00 00 00  ff 00 00 00 00 ff ff ff  |................|
000000c0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000002a0  00 00 00 00 00 00 ff 00  00 00 00 00 00 00 00 00  |................|
000002b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000310  00 00 00 00 ff ff 00 00  00 00 00 00 00 00 00 00  |................|
00000320  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
0000d000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0000d400  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0000d410  ff ff ff ff ff ff ff ff  ff 00 00 00 00 00 00 00  |................|
0000d420  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0000dc00  00 00 00 00 ff ff 00 00  00 00 00 00 00 00 00 00  |................|
0000dc10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0000e000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00010000
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.24. 12:30:41
Csomagolt DAC táblázat készítése az itt (https://enterpriseforever.com/sound/sid-lejatszo/msg62802/#msg62802) mért szintek alapján (amik valójában a plus4emu kimenetéről készültek az alábbi programmal, talán célszerűbb lett volna a valódi gépet tesztelni):

[attachurl=1]    (fordítás a sid_conv-hoz hasonlóan)
[attachurl=2]
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.24. 13:53:17
[attachurl=1]

* tömörített dacTable, így már elfért a régebbi kód ami nem rontotta el a turbókat
* feltételesen fordítható újdonságok:
- keretcsíkozás csak a főprogramban (NO_IRQ_BORDER_FX = 1), 4 ciklus / hangminta gyorsulás
- vezérlés a főprogramban video megszakítás helyett (NO_VIDEO_IRQ = 1), 6 ciklussal gyorsabb, de pontatlanabb az időzítés és nagyobb a kód
- $2B nem dokumentált utasítás használata a hangminta lejátszó rutinban (USE_6502_UNDOC = 1), 4-6 ciklussal gyorsabb
- PWM invertálása ha a magas szint lenne gyakoribb (PWM_AUTO_INVERT = 1)
Title: Re: SID lejátszó
Post by: geco on 2017.March.24. 14:12:02
Szép teljesítmény :)
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.March.24. 14:26:57
Elvileg minden modern PSID fájlban van egy bejegyzés, hogy mely területek biztonságosak. Ezeket érdemesebb összefésülni, mint egyesével végighajtani egy lejátszóban, majd összegezni a futási eredményeket. Szerintem.

Graham/Oxyron készített egy táblázatot az összes lehetséges NMOS 6502 (származék processzor) utasításról. Ebben részletesen elemezve van még az is, hogy melyek a stabil és instabil "illegális" utasítások.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.24. 14:36:36
Graham/Oxyron készített egy táblázatot az összes lehetséges NMOS 6502 (származék processzor) utasításról. Ebben részletesen elemezve van még az is, hogy melyek a stabil és instabil "illegális" utasítások.

A táblázat szerint az ANC ($2B) utasítás stabil. Néhány másik is hasznos lehetne, de elsősorban a hangminta megszakításnál fontos minden ciklus, ott az ANC megtakarít néhány 2-3 CLC-t.
Title: Re: SID lejátszó
Post by: geco on 2017.March.24. 15:40:49
Az ANC ezek szerint úgy működik, mint z80-on az AND?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.24. 15:48:07
Az ANC ezek szerint úgy működik, mint z80-on az AND?

Nem egészen, mert itt a C bit az S másolata lesz, de ebben az esetben az mindig 0, mert a csatornák hangminta értékei 0-63 tartományra korlátozottak.
Title: Re: SID lejátszó
Post by: geco on 2017.March.24. 16:25:33
Nem egészen, mert itt a C bit az S másolata lesz, de ebben az esetben az mindig 0, mert a csatornák hangminta értékei 0-63 tartományra korlátozottak.
:lol: oké, értem, mókásak ezek az undokumentált utasítások :)
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.March.24. 18:53:18
:lol: oké, értem, mókásak ezek az undokumentált utasítások :)
Hát még az, ahogyan működnek (http://www.pagetable.com/?p=39)! (Nem mindig elérhető az oldal, mintha valami háztáji szerverről futna.)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.March.24. 19:03:43
Új D64 file:
[attachurl=1]
[attachurl=2]

A zenék száma 9-ről 15-re növelve (tulajdonképpen lehetne több is, mert most már hiányzó file esetén a program újra az elsőt próbálja betölteni), 1541-es turbó cserélve olyanra, ami hibánál nem lép ki a BASIC-be, néhány egyéb kisebb változtatás.

Szerk.: képernyő kikapcsolás nélküli változat konvertált képpel, így természetesen rosszabb a minőség (7151 Hz), és gyűrűmoduláció sincs:
[attachurl=3]
[attachurl=4]
Title: Re: SID lejátszó
Post by: geco on 2017.April.04. 14:04:25
Enterprise SIDBasic (https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=17680) legfrissebb verziója bekerült a letöltések közé, lecseréltem az eggyel régebbi verziót :)
Spectrum SIDBasicSP (https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=17681) legfrissebb verziója is bekerült a letöltések közé

Tape Encoder tool (https://enterpriseforever.com/sound/sid-lejatszo/msg62769/#msg62769), segítségével készíthető TAP/TZX file az Enterprise M64 fájlokból, használata (https://enterpriseforever.com/sound/sid-lejatszo/msg62737/#msg62737)
Kiegészítés (https://enterpriseforever.com/sound/sid-lejatszo/msg62783/#msg62783) a spectrum véltozathoz, az Enterprise verzióban leírtakhoz képest.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.06. 10:52:46
A SID lejátszó téma ugyan már nem tűnik aktuálisnak, de a Plus/4 verzióban van még egy-két optimalizálás ami talán hasznos lehetett volna EP-n is. A frekvenciát táblázattal konvertálja (8 bites érték szorzása 8 bites konstanssal = 512 byte méretű táblázat), és a hullámforma/hangerő byte-ot is táblázat segítségével dolgozza fel (amelynek minden eleme a megfelelő hangminta táblázat címe / 256, vagy 0 négyszögjel esetén). Így lehet, hogy  valamivel nagyobb frekvencia lett volna elérhető.
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.April.06. 11:07:14
Így lehet, hogy  valamivel nagyobb frekvencia lett volna elérhető.
Akkor ezt jó lenne beépíteni, ha lehet! :oops:
Title: Re: SID lejátszó
Post by: geco on 2017.April.06. 14:10:39
A SID lejátszó téma ugyan már nem tűnik aktuálisnak, de a Plus/4 verzióban van még egy-két optimalizálás ami talán hasznos lehetett volna EP-n is. A frekvenciát táblázattal konvertálja (8 bites érték szorzása 8 bites konstanssal = 512 byte méretű táblázat), és a hullámforma/hangerő byte-ot is táblázat segítségével dolgozza fel (amelynek minden eleme a megfelelő hangminta táblázat címe / 256, vagy 0 négyszögjel esetén). Így lehet, hogy  valamivel nagyobb frekvencia lett volna elérhető.
a 8x8-s táblázattal rontunk a felbontáson, ami a rendes osztással majdnem 15 bit, a táblázattal meg csak 8 lenne, nem?
A táblázatos hangerő/hullámforma bevihető, de lehet ezzel egyidőben meg kéne nézni a gyorsítási lehetőségeket is a megszakítási rutinban, gondolom a kettő együtt közelítené meg a szorzó rutin táblázatos kiváltását.
Title: Re: SID lejátszó
Post by: geco on 2017.April.06. 14:15:23
Ha egy full szegmenst használunk a táblának, az már egész jó lehetne.
Vagy a 8bites szorzótáblánál mind a két frekvenciabájtot szorzod és aztán összeadod helyiértéknek megfelelően? (nem néztem a forrást)
És tuti így csinálod, mert ez egy marha jó ötlet :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.06. 14:15:34
a 8x8-s táblázattal rontunk a felbontáson, ami a rendes osztással majdnem 15 bit, a táblázattal meg csak 8 lenne, nem?

Elvileg ugyanaz az eredmény ha nem hibás a kód, még a kerekítés is (itt a DE a bemenet és a HL a kimenet, talán jobban is lehetne optimalizálni):
Code: ZiLOG Z80 Assembler
  1.         ld      l, d
  2.         ld      h, high freqMultTable
  3.         ld      d, high (freqMultTable + 256)
  4.         ld      a, (de)
  5.         scf
  6.         adc     a, (hl)
  7.         ld      e, a
  8.         inc     h
  9.         ld      a, 0
  10.         adc     a, (hl)
  11.         ld      l, e
  12.         rra
  13.         ld      h, a
  14.         rr      l
Title: Re: SID lejátszó
Post by: geco on 2017.April.06. 14:24:23
Elvileg ugyanaz az eredmény ha nem hibás a kód, még a kerekítés is (itt a DE a bemenet és a HL a kimenet, talán jobban is lehetne optimalizálni):
Viszont ha fel tudunk menni 12KHz-re, mi legyen a maximum sebesség turbós gépen? 48KHz ? (ha Zozón múlik lesz 16 MHz-es EP is ;) )
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.06. 15:13:28
Viszont ha fel tudunk menni 12KHz-re, mi legyen a maximum sebesség turbós gépen? 48KHz ? (ha Zozón múlik lesz 16 MHz-es EP is ;) )

Magasabb mintavételezési frekvenciánál rosszabb a frekvencia konverzió pontossága, de nem tudom, ez a gyakorlatban mennyire jelent problémát a 48 kHz egyébként jobb minőségéhez képest. Ilyenkor a zaj frekvenciája 8.36 bites lenne, a többi hullámformánál pedig 12.36 bites.

A hangerő byte konvertáló táblázata még hatékonyabb lehetne így:
- négyszögjelnél hangerő * 4 + 1
- egyéb hullámformáknál hangminta táblázat kezdőcíme / 128

Ezzel a megoldással ebből a rutinból:
Code: ZiLOG Z80 Assembler
  1. .   892C  E6 80        AND   80
  2. .   892E  5F           LD    E, A
  3. .   892F  79           LD    A, C
  4. .   8930  E6 60        AND   60
  5. .   8932  28 12        JR    Z, 8946
  6. .   8934  FE 20        CP    20
  7. .   8936  28 16        JR    Z, 894E
  8. .   8938  FE 40        CP    40
  9. .   893A  28 1A        JR    Z, 8956
  10. .   893C  79           LD    A, C
  11. .   893D  E6 1F        AND   1F
  12. .   893F  06 41        LD    B, 41
  13. .   8941  B7           OR    A
  14. .   8942  28 12        JR    Z, 8956
  15. .   8944  80           ADD   A, B
  16. .   8945  C9           RET
  17. .   8946  79           LD    A, C
  18. .   8947  E6 1F        AND   1F
  19. .   8949  06 03        LD    B, 03
  20. .   894B  C3 41 89     JP    8941
  21. .   894E  79           LD    A, C
  22. .   894F  E6 1F        AND   1F
  23. .   8951  06 22        LD    B, 22
  24. .   8953  C3 41 89     JP    8941
  25. .   8956  79           LD    A, C
  26. .   8957  E6 1F        AND   1F
  27. .   8959  87           ADD   A, A
  28. .   895A  00           NOP
  29. .   895B  00           NOP
  30. .   895C  37           SCF
  31. .   895D  C9           RET

ez maradna (tulajdonképpen lehetne inline is, mert csak néhány utasítás):
Code: ZiLOG Z80 Assembler
  1.         ld    d, b
  2.         and   80h
  3.         ld    e, a
  4.         ld    b, high volumeConvTable
  5.         ld    a, (bc)
  6.         rra
  7.         ret

Szerk.: ez azonban nem működik a 8 bites DAC használatakor. Ilyenkor lehetne a táblázatban 8-szoros hangerő + 1, és utána még egy ADD A,A csak négszögjelnél, aminek a helyére 6 bites D/A esetén NOP kerül.

Szerk. 2: a PWM (B regiszter) elvesztése javítva.

Szerk. 3: egy csatorna vezérlése módosítva:
Code: ZiLOG Z80 Assembler
  1.         LD    E, (HL)
  2.         LD    D, A
  3.         ld    l, d
  4.         ld    h, high freqMultTable
  5.         ld    d, high (freqMultTable + 256)
  6.         ld    a, (de)
  7.         scf
  8.         adc   a, (hl)
  9.         ld    e, a
  10.         inc   h
  11.         ld    a, 0
  12.         adc   a, (hl)
  13.         ld    l, e
  14.         rra
  15.         ld    h, a
  16.         rr    l
  17.         POP   BC
  18.         LD    A, C
  19.         LD    (8897h), A
  20.         ld    d, b
  21.         and   80h
  22.         ld    e, a
  23.         ld    b, high volumeConvTable
  24.         ld    a, (bc)
  25.         rra
  26.         jr    c, l1
  27.         LD    (8929h), A
  28.         DI  
  29.         LD    (0045h), HL
  30.         LD    HL, 8927h
  31.         jr    l2
  32. l1:     rrca                            ; * 8-bit D/A: ADD A, A (87h)
  33.         LD    (8926h), A
  34.         ld    a, d
  35.         LD    (8923h), A
  36.         DI  
  37.         LD    (0045h), HL
  38.         LD    HL, 8922h
  39. l2:     LD    A, E
  40.         LD    (004Ch), A
  41.         LD    DE, 004Eh
  42.         LDI
  43.         LDI
  44.         LDI
  45.         LDI
  46.         EI  
  47.         LDI

az eredeti kód:
Code: ZiLOG Z80 Assembler
  1. .   87DB  5E           LD    E, (HL)
  2. .   87DC  57           LD    D, A
  3. .   87DD  C7           RST   00
  4. .   87DE  C1           POP   BC
  5. .   87DF  79           LD    A, C
  6. .   87E0  32 97 88     LD    (8897), A
  7. .   87E3  CD 2C 89     CALL  892C
  8. .   87E6  F3           DI  
  9. .   87E7  22 45 00     LD    (0045), HL
  10. .   87EA  38 0C        JR    C, 87F8
  11. .   87EC  32 29 89     LD    (8929), A
  12. .   87EF  7B           LD    A, E
  13. .   87F0  32 4C 00     LD    (004C), A
  14. .   87F3  21 27 89     LD    HL, 8927
  15. .   87F6  18 0E        JR    8806
  16. .   87F8  32 26 89     LD    (8926), A
  17. .   87FB  7B           LD    A, E
  18. .   87FC  32 4C 00     LD    (004C), A
  19. .   87FF  78           LD    A, B
  20. .   8800  32 23 89     LD    (8923), A
  21. .   8803  21 22 89     LD    HL, 8922
  22. .   8806  11 4E 00     LD    DE, 004E
  23. .   8809  ED A0        LDI
  24. .   880B  ED A0        LDI
  25. .   880D  ED A0        LDI
  26. .   880F  ED A0        LDI
  27. .   8811  FB           EI  
  28. .   8812  ED A0        LDI

Itt a négyszögjel hangereje mindig nyolcszoros (+1), csak a léptetés iránya változik a DAC felbontásától függően. Kis mértékben rövidült a letiltott megszakítás időtartama is.
Title: Re: SID lejátszó
Post by: geco on 2017.April.07. 08:42:34
Elméletileg a leírt módosítások készen bekerültek még csak 10KHz-es lejátszással, valami nem stimmel, nem szól olyan jól, mint a régi, lehet elszúrtam valamit a táblakreálásnál, ma megnézem, és ha pont úgy szól, mint a régi, akkor emelek a digi lejátszás sebességén.
Valamit említettél a PWM-re is, hogy invertálva lenne az igazi?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.07. 10:46:05
Valamit említettél a PWM-re is, hogy invertálva lenne az igazi?

Igen, valójában ez lenne pontos:
Code: ZiLOG Z80 Assembler
  1.         cp    PW
  2.         ccf
  3.         sbc   a, a
  4.         and   VOLUME
de nem tudom, hogyan lehetne ezt helyesen megoldani lassulás nélkül, ezért talán nem érné meg, mivel az invertált PWM egyébként nem sokat változtat a hangon.

Elméletileg a leírt módosítások készen bekerültek még csak 10KHz-es lejátszással, valami nem stimmel, nem szól olyan jól, mint a régi, lehet elszúrtam valamit a táblakreálásnál, ma megnézem, és ha pont úgy szól, mint a régi, akkor emelek a digi lejátszás sebességén.

A táblázatok tartalma 10 kHz-es mintavételezési frekvenciánál:

freqMultTable[n] = (n * 197) & 255
freqMultTable[n + 256] = (n * 197) / 256
volumeConvTable[n] = (n & 31) * 8 + 1    - ha négyszögjel vagy 0 hangerő
volumeConvTable[n] = ((triangleTables / 256) + (n & 31) - 1) * 2    - háromszögjel
volumeConvTable[n] = ((sawtoothTables / 256) + (n & 31) - 1) * 2    - fűrészjel
volumeConvTable[n] = ((noiseTables / 256) + (n & 31) - 1) * 2    - zaj
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.07. 15:45:18
Módosított snapshot (nem optimális megoldás, mert csak a memóriában szerkesztettem a kódot, így nem volt elkerülhető például a CALL használata):
[attachurl=1]

Szerk.: a gyorsulás nem túl jelentős, de 10870 Hz-en valószínűleg stabil lehetne. Elsősorban a nem 50 Hz-es file-ok jelentenek problémát.
Title: Re: SID lejátszó
Post by: geco on 2017.April.07. 19:34:24
Eljutottam én is a sebességállításhoz, a hangzásbeli különbséget az okozta, hogy a négyszögjel hangerőtábláját csak 4x+1-gyel generáltam, nem 8x+1-gyel.
11904 Hz-en az 50Hz-es SID-ek stabilan működnek, a 150Hz-es Paperboy is jó, a 200Hz-es HVSC fagyizik
11363 Hz-en minden működik, a HVSC-nél előfordul, hogy a kicsomagolás után kevesebb, mint egy másodperc a várakozási rész.
Melyik legyen a végső beállítás 11363, vagy 10870 Hz?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.08. 09:46:04
Melyik legyen a végső beállítás 11363, vagy 10870 Hz?

A 10870 megbízhatóbbnak tűnik, és az is jobb az eddigi 10000-nél. Esetleg 11364 csak 50 Hz-es file esetén, de az tovább bonyolítaná a sebesség beállítását. :) Vagy ha lehetne még gyorsítani a megszakítás kezelésen. Ha a kicsomagoló rutin nem használná az IX regisztert sem, akkor azzal 10 ciklus/hangminta lenne megtakarítható video megszakítás nélkül az IX-et számlálónak használva. De így a kivezérlésjelző és a raszter megjelenítésével probléma lehetne (villogás), mert a frissítésük "véletlenszerű" LPB-nél történne fix pozíció helyett.
Title: Re: SID lejátszó
Post by: geco on 2017.April.08. 11:31:43
A 10870 megbízhatóbbnak tűnik, és az is jobb az eddigi 10000-nél. Esetleg 11364 csak 50 Hz-es file esetén, de az tovább bonyolítaná a sebesség beállítását. :) Vagy ha lehetne még gyorsítani a megszakítás kezelésen. Ha a kicsomagoló rutin nem használná az IX regisztert sem, akkor azzal 10 ciklus/hangminta lenne megtakarítható video megszakítás nélkül az IX-et számlálónak használva. De így a kivezérlésjelző és a raszter megjelenítésével probléma lehetne (villogás), mert a frissítésük "véletlenszerű" LPB-nél történne fix pozíció helyett.
Igen, pláne gyorsabb vezérlésű SID esetén, mint a HVSC, én az eslő megoldásra szavaznék, a másodiknál tényleg jelentős gyorsulást okozna hangmintánként 10 ciklus, a kijelző zavar egyelőre.
Title: Re: SID lejátszó
Post by: geco on 2017.April.08. 12:56:13
Itt a teszt verzió, ami különböző lejátszási frekvenciát állít be az 50Hz-es vezérlésű, és 50Hz-nél gyorsabb vezérlésű zenékre, a kijelzőn nem látszik 4MHz-en, mert kerekített érték jelenik meg, 8MHz-en már van eltérés, leteszteltem magnós konfigon 4MHz-es gépen, turbós gépen (Dave is gyorsítva), és emu turbón (Dave nem gyorsul), és EXDOS alatt normál beállításokkal, én nem találtam hibát, de az nem jelent semmit, csekkoljátok ti is:)
Ha nincs hiba, akkor csomagolom, és megcsinálom a ROM verziót is.

Csatolmány törölve.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.09. 13:53:09
a másodiknál tényleg jelentős gyorsulást okozna hangmintánként 10 ciklus, a kijelző zavar egyelőre.

Egyéb lehetőségek gyorsításra:
- video megszakítás figyelése a főprogramban, -25 ciklus, de nem egyszerű megoldani, különösen mivel a DAVE megszakítás tárolói nem használhatók az adott megszakítás tiltásakor (Plus/4-en ilyenkor is olvashatók)
- a már említett IX regiszter nélküli (valamivel lassabb) kicsomagoló rutin, a hangminta lejátszásnál a DE' cseréje IX-re (+4 ciklus), viszont a DE'-t fix 8013h értékre állítva gyorsabb gyűrűmoduláció (-9 ciklus) és megszakítás törlés (-3 ciklus). Így a video megszakítás kezelése nem változik, de csak 8 ciklus a gyorsulás és bonyolultabb a gyűrűmoduláció vezérlése
Title: Re: SID lejátszó
Post by: geco on 2017.April.09. 15:22:36
Egyéb lehetőségek gyorsításra:
- video megszakítás figyelése a főprogramban, -25 ciklus, de nem egyszerű megoldani, különösen mivel a DAVE megszakítás tárolói nem használhatók az adott megszakítás tiltásakor (Plus/4-en ilyenkor is olvashatók)
- a már említett IX regiszter nélküli (valamivel lassabb) kicsomagoló rutin, a hangminta lejátszásnál a DE' cseréje IX-re (+4 ciklus), viszont a DE'-t fix 8013h értékre állítva gyorsabb gyűrűmoduláció (-9 ciklus) és megszakítás törlés (-3 ciklus). Így a video megszakítás kezelése nem változik, de csak 8 ciklus a gyorsulás és bonyolultabb a gyűrűmoduláció vezérlése
Az elsőt hogyan lehetne megoldani? a kicsomagoló rutinba is beágyazni egy videómegszakítás figyelést?
Ha jól emlékszem Dave-en keresztül nem tiltunk megszakítást, csak DI-vel, vagy az új megoldáshoz kéne valamelyiket tiltani?
Ahogy én gondolom, nem kéne, be kéne ágyazni a video megszakítás figyelést a kicsomagoló rutinba, meg a kicsomagolás utáni várakozásba (ez a része egyszerű)
Title: Re: SID lejátszó
Post by: geco on 2017.April.09. 20:08:41
Már értem a problémát, ha nem tiltjuk a videó megszakítást, akkor a videó megszakítás törlésével lesznek gondjaink, ha töröljük minden Dave megszakításban, akkor nem jut a program az 50Hz-es vezérléshez, ha nem töröljük ,akkor végtelen ciklusba kerül a Dave megszakítás ha videó megszakítás alatt kerültünk oda :D , és a másik probléma, hogy minden di-vel , és ei-vel az 50Hz-es csekkolást is ki/be kell kapcsolni (ez a kisebbik probléma, szinte nem is az :) )
Én azt hittem, hogy kikapcsolt videó megszakítás mellett legalább az interrupt byte elérését az LPT-ben jelzi a 0b4h port.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.09. 22:12:10
Én azt hittem, hogy kikapcsolt videó megszakítás mellett legalább az interrupt byte elérését az LPT-ben jelzi a 0b4h port.

Jelzi, de csak a 4. bit. Így nehezebb megoldani, mert a bit változását kell figyelni, és az LPT-nél is fontos hogy a VINT bit elég hosszú ideig legyen 0 és 1 is ahhoz, hogy ne vesszen el megszakítás.
Title: Re: SID lejátszó
Post by: geco on 2017.April.09. 23:11:23
Jelzi, de csak a 4. bit. Így nehezebb megoldani, mert a bit változását kell figyelni, és az LPT-nél is fontos hogy a VINT bit elég hosszú ideig legyen 0 és 1 is ahhoz, hogy ne vesszen el megszakítás.
Na erre emlékeztem én is, de most a teszt alatt valahogy sose volt a 4. bit beállított. Betettem a figyelést a kicsomagoló rutinba két helyre: a Read8bit.L1-re, és a readencodedvalue-ba, és a várakozásba a halt után. Azt nem néztem, milyen hosszú a VINT-es LPB.
Title: Re: SID lejátszó
Post by: geco on 2017.April.10. 08:49:05
Ébredés után jutott eszembe, hogy ez nem fog menni, mert a gyorsabb vezérlésű SID-eknél az LPB biztos 1 hosszú.
Title: Re: SID lejátszó
Post by: geco on 2017.April.10. 20:36:35
Betettem az IX nélküli kicsomagoló rutint, és eszközöltem a javallott módosításokat. A módosított kicsomagoló tökéletesen működik, gondolom most optimalizálsz, a hozzászólás eltűnéséből gondolom :) Természetesen ahogy szoktam, hibát vétettem, vagyis annyi, hogy a vezérlés nem lassult, hanem gyorsítani is sikerült rajta, jelentős 6, azaz jól látja mindenki 6 ciklust :ds_icon_cheesygrin: (igaz a DI-s rész 3 ciklussal hosszabb lett) ,ez eredetileg 12 lett volna ezzel a kóddal:
Code: [Select]
       ld      a,c
        ld      (v1vol+1),a
        ld      d,b
;        and     80h
;        ld      e,a
        ld      b,high volumeConvTable
        ld      a,(bc)
        inc     b
        rra
        jr      c,pulse1
        ld      (otherw+2),a    ;triangle sawtooth noise
        di  
        ld      (sidSynth.l1+1),hl
        ld      hl,otherw
        jr      wavtab1
pulse1  rrca                            ; * 8-bit d/a: add a, a (87h)
        ld      (pulsevl+1),a   ;volume value
        ld      a,d
        ld      (pulsew+1),a    ;pwm
        di  
        ld      (sidSynth.l1+1),hl
        ld      hl,pulsew
wavtab1 ;ld      a,e             ;ring mod
        ld      a,(bc)          ;xor a/and d
        ld      (sidSynth.l2),a
de, így a volumeConvTable-ből való adat kinyeréskor előfordult, hogy a C bit be volt lőve, eredetileg egy xor a-t akartam tenni a volumeConvTable elé,de akkor eszembe jutott, hogy a hangerő kijelzőnél AND D-el vágom le a hangerő értéket, ha azt kiszedem, és az LD DE,0e01fh helyett csak LD D,0e0h-t használok, akkor még gyorsítani is lehet 3x1 + 3 ciklust a következő módosítással :)
Code: [Select]
       ld      a,c
        and     1fh
        ld      (v1vol+1),a
        ld      d,b
;        and     80h
;        ld      e,a
        ld      b,high volumeConvTable
        ld      a,(bc)
        inc     b
        rra
        jr      c,pulse1
        ld      (otherw+2),a    ;triangle sawtooth noise
        di  
        ld      (sidSynth.l1+1),hl
        ld      hl,otherw
        jr      wavtab1
pulse1  rrca                            ; * 8-bit d/a: add a, a (87h)
        ld      (pulsevl+1),a   ;volume value
        ld      a,d
        ld      (pulsew+1),a    ;pwm
        di  
        ld      (sidSynth.l1+1),hl
        ld      hl,pulsew
wavtab1 ;ld      a,e             ;ring mod
        ld      a,(bc)          ;xor a/and d
        ld      (sidSynth.l2),a
természetesen ez is fagyival kezdett, mert az LD DE,0e01fh-ról LD D,0e0h-ra való átállásnál nem vettem figyelembe, hogy az 0e0h-t a program írja, ezt két helyen kellett még módosítani.

Csatolmány törölve
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.10. 22:48:30
Quote
gondolom most optimalizálsz, a hozzászólás eltűnéséből gondolom :)

Valójában azért tűnt el, mert jobban meggondolva talán mégsem igazán jó ötlet. :oops: Csak akkor gyorsul a számított mértékben, ha 100% a CPU használat, bár a kicsomagolási idők így is valamivel jobbak lettek a korábbi verziónál.

Quote
(igaz a DI-s rész 3 ciklussal hosszabb lett)

Az LD A, (BC) lehetne a DI előtt is, ez ugyan 3 byte méretnövekedést eredményez, de a FILE-os szegmensen talán nincs nagy jelentősége.
Title: Re: SID lejátszó
Post by: geco on 2017.April.10. 22:52:03
Az LD A, (BC) lehetne a DI előtt is, ez ugyan 3 byte méretnövekedést eredményez, de a FILE-os szegmensen talán nincs nagy jelentősége.
Egyelőre nincsen :D , meg is csinálom, így a DI-s rész 4 ciklussal rövidebb is, mint az eredetiben.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.11. 12:05:05
Ez ugyanaz a verzió, ha már be van építve, akkor legyen hozzá forráskód is: :)
[attachurl=1]
[attachurl=2]    (IX-es változat)

Sebesség teszt (nem a lejátszóban, hanem csak a kicsomagoló rutinok egy egyszerű programba építve):

INTERNA.M64 (24124 byte, 396 másodperc):

decompress_m2_new.s: 4.434 másodperc
decompress_m2_8K.s: 4.438 másodperc
decompress_m2_8K_noIX.s: 4.668 másodperc

AUFWIED.M64 (15444 byte, 369 másodperc):

decompress_m2_new.s: 3.019 másodperc
decompress_m2_8K.s: 3.027 másodperc
decompress_m2_8K_noIX.s: 3.157 másodperc

ACEII.M64 (14237 byte, 315 másodperc):

decompress_m2_new.s: 2.729 másodperc
decompress_m2_8K.s: 2.725 másodperc
decompress_m2_8K_noIX.s: 2.850 másodperc

Az IRQ kezelés optimalizálása ~17-20% gyorsulást eredményez 4 MHz-es gépen 11364 Hz-es lejátszásnál és 50 Hz-es vezérlésnél.
Title: Re: SID lejátszó
Post by: geco on 2017.April.11. 13:11:23
Ahogy nézem, jelentéktelen a lassulás, pláne, ha levetítjük ezt egy 50Hz-es megszakításra, igaz, ott a 1x KHz-es megszakítás befolyásoló tényezőnek, de mivel gyorsult az is 2%-ot szerintem jók vagyunk, én már azon gondolkoztam, hogy
50Hz-es vezérlést 11904 Hz-re
100Hz-es vezérlést 11363 Hz-re és a
100Hz fölötti vezérlést 10869 Hz-re állítom, ezeknek elméletileg stabilan kéne működnie.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.11. 16:11:47
én már azon gondolkoztam, hogy
50Hz-es vezérlést 11904 Hz-re

Próbáltam 12500-at is, az még működik, de villog a raszter és 5 másodperc körüli kicsomagolási idő fordulhat elő. Ez akkor lehet probléma, ha az utolsó blokk nagyon rövid, bár ha jól látom, ilyenkor a vezérlés elvileg várna a következő blokkra (ha (015Bh) = 0):
Code: ZiLOG Z80 Assembler
  1. .   89A0  21 6A DE     LD    HL, DE6A
  2. .   89A3  23           INC   HL
  3. .   89A4  22 A1 89     LD    (89A1), HL
  4. .   89A7  7D           LD    A, L
  5. .   89A8  FE F8        CP    F8
  6. .   89AA  20 2B        JR    NZ, 89D7
  7. .   89AC  7C           LD    A, H
  8. .   89AD  E6 1F        AND   1F
  9. .   89AF  FE 1F        CP    1F
  10. .   89B1  20 24        JR    NZ, 89D7
  11. .   89B3  3A 5B 01     LD    A, (015B)
  12. .   89B6  B7           OR    A
  13. .   89B7  CA 2A 8B     JP    Z, 8B2A
itt azonban hiba lehet, hogy a pozíció növelése után a következő megszakítás már átugraná ezt a részt és szemetet játszana le. Az LD (89A1), HL-t esetleg célszerűbb lenne az LD DE, FD56 elé helyezni, így egy másik hasonló utasítás törölhető is.

A 11905 Hz még nem villog, tehát az valóban stabil lenne.
Title: Re: SID lejátszó
Post by: geco on 2017.April.11. 21:11:00
Módosítások eszközölve :) Legújabb teszt verzió, már ROM verzió is van a csomagban.

Csatolmány törölve.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.12. 09:41:58
Módosítások eszközölve :) Legújabb teszt verzió, már ROM verzió is van a csomagban.

Egy lehetséges hiba: 4 MHz-es CPU-n 12 kHz-et ír ki, de továbbra is 11364 Hz frekvenciát állít be.
Title: Re: SID lejátszó
Post by: geco on 2017.April.12. 11:16:29
Egy lehetséges hiba: 4 MHz-es CPU-n 12 kHz-et ír ki, de továbbra is 11364 Hz frekvenciát állít be.
Elszúrtam, mindenhol eggyel magasabb értéket állítok be, mint kéne, elszámoltam :lol:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.12. 11:59:22
Újabb ötlet gyorsításra: video megszakítás helyett a hangminta frekvenciát osztani két lépésben, először kb. 500 Hz-re (12500 / 25), aztán tovább a vezérlés frekvenciájára (50 Hz = 500 / 10). Ha a kivezérlésjelző alatt van egy elég hosszú VINT-es LPB (a video megszakítás jelenlegi pozíciója alapján legfeljebb 48 sor azaz 3 ms idő lehetséges), akkor az 500 Hz-en még megbízhatóan figyelhető a B4h port 4. bitjén. A második számláló lefutására történik a vezérlés, a VINT bit felfutó élére pedig a kijelzés frissítése.

Ez ugyan nem egyszerű módosítás, különösen az optimális frekvencia osztók beállítása a hangminta és a vezérlés frekvencia alapján, tehát nem biztos, hogy megéri.

Amit nyerni lehet vele az IRQ rutinban:
- 25 ciklus gyorsulás a video megszakítás tárolójának a figyelése nélkül
- 3 ciklus lassulás a megszakítás törlésekor (E regiszter helyett konstans)
- 11 ciklus lassulás az első számláló (DEC E és JR Z)
- ~113 ciklus lassulás csak a lefutásakor (nem feltétlenül jól optimalizálva), átlagosan 113 / 25 = 4.52 ciklus
Azaz ~6.5 ciklus / hangminta nyerhető. Ezen kívül lehetségessé válik nem csak 50 Hz többszöröseinek a támogatása, és fix VINT pozíció használata.
Title: Re: SID lejátszó
Post by: geco on 2017.April.12. 13:24:42
Tehát úgy, hogy az 500 Hz legyen fix, tehát azt kell a tényleges lejátszási frekvenciából számolni, és a vezérlési sebességet meg az 500 Hz tovább osztásából?
Első körben a digi lejátszó futna addig ciklusban, amíg eléri az 500 Hz-et, ilyenkor mindig csekkolunk 4. bitet a 0b4h porton, ha aktív, akkor ugrás a display vezérlésre, majd csekkolni hogy a zenevezérlő ciklus elérte-e a 0-t, ha igen, vezérlés, egyébként visszatérés a megszakításból?

A Dave osztó hibát javítottam a lenti csomagban
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.12. 13:52:16
Tehát úgy, hogy az 500 Hz legyen fix, tehát azt kell a tényleges lejátszási frekvenciából számolni, és a vezérlési sebességet meg az 500 Hz tovább osztásából?

Az 500 Hz változhat kis mértékben, így pontosabb lehet a frekvencia. Például 200 Hz-es bemeneti file esetén 500-ból csak 250 vagy 167 Hz lehetne, viszont a 400 vagy 600 már jól osztható. A használható tartományt korlátozza a VINT hosszúsága (nem veszhet el video megszakítás), nagyobb frekvencia pedig több CPU időt használ.

Quote
Első körben a digi lejátszó futna addig ciklusban, amíg eléri az 500 Hz-et, ilyenkor mindig csekkolunk 4. bitet a 0b4h porton, ha aktív, akkor ugrás a display vezérlésre, majd csekkolni hogy a zenevezérlő ciklus elérte-e a 0-t, ha igen, vezérlés, egyébként visszatérés a megszakításból?

Valami ilyesmivel próbálkoztam, ez nem biztos hogy optimális (vagy működő) megoldás:
Code: ZiLOG Z80 Assembler
  1.         dec     e
  2.         jr      z, l1
  3.         exx
  4.         ex      af, af'
  5.         ei
  6.         ret
  7.  
  8. l1:     ld      e, 25                   ; *    12
  9.         exx
  10.         ei
  11.         ex      af, af'
  12.         push    af                      ;      23
  13.         in      a, (0b4h)               ;      34
  14.         cpl                             ;      38
  15.         and     10h                     ;      45
  16. l2:     cp      00h                     ; *    52
  17.         ld      (l2 + 1), a             ;      65
  18. l3:     ld      a, 10                   ; *    72
  19.         dec     a                       ;      76
  20.         ld      (l3 + 1), a             ;      89
  21.         jr      z, l4                   ;      96
  22.         jr      c, l4                   ;     103
  23.         pop     af                      ;     113
  24.         ret
  25. l4:
Itt az l1-nél kezdődő rész lehet 30h alatt is, ha nincs elég hely. Az l4-nél Z=1 esetén a vezérlésnek kell futni, C=1-nél pedig a kijelzésnek, ezek egyszerre is történhetnek.

Szerk.: 12500 Hz-en 6 ciklussal gyorsabb megszakítás kezelés még nem elég ahhoz, hogy ne villogjon a raszter.

Szerk. 2: a CPL megtakarítható a VINT áthelyezésével a kivezérlésjelzőre és/vagy elé. Esetleg a kivezérlésjelző megoldható úgy, hogy ne legyen minden sor külön LPB, így egyszerűbb a frissítése.
Title: Re: SID lejátszó
Post by: geco on 2017.April.12. 14:21:32
Tetszik a külön Z bit és külön carry állító rész, szerintem működik :)
Title: Re: SID lejátszó
Post by: geco on 2017.April.13. 16:22:57
Most néztem az LPT-t, elméletileg 100 raszter sorra mehet a VINT bit, 48 a volume kijelző alatt az Enterprise feliratig, és 52 a reload bitig, mivel nem akarunk interruptot, csak a figyelni a VINT beállítást, így pakolhatunk egymás utáni LPB-kbe VINT bitet, működnie kell, nem? Ezzel a második ciklusszámlálót akár csökkenthetnénk 4-re is, amivel megspórolnánk 678 ciklust. A képernyő tetején 27 raszter sor úgyszintén nem használt, előre tettem a kijelzős dolgokat, és csak utána lesz a zene vezérlés, ha esetleg a 27 képsor sor nem elég a képernyőn való piszmogásra, a VINT-es képsorokból még elvehetünk, max a ciklusszámláló 5 lesz.
Mit szólsz?
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.13. 16:30:05
Most néztem az LPT-t, elméletileg 100 raszter sorra mehet a VINT bit, 48 a volume kijelző alatt az Enterprise feliratig, és 52 a reload bitig, mivel nem akarunk interruptot, csak a figyelni a VINT beállítást, így pakolhatunk egymás utáni LPB-kbe VINT bitet, működnie kell, nem?

Nem probléma, ha több egymást követő LPB-ben van beállítva a VINT bit, az is folyamatosnak számít, a NICK egyébként is minden sorban újraolvassa. :) A pozíció és hosszúság választásánál fontos, hogy ne villoghasson a raszter. A VINT lefutó élét egyszerűbb figyelni, akkor törölhető a CPL utasítás.
Title: Re: SID lejátszó
Post by: geco on 2017.April.13. 17:37:44
Nem probléma, ha több egymást követő LPB-ben van beállítva a VINT bit, az is folyamatosnak számít, a NICK egyébként is minden sorban újraolvassa. :) A pozíció és hosszúság választásánál fontos, hogy ne villoghasson a raszter. A VINT lefutó élét egyszerűbb figyelni, akkor törölhető a CPL utasítás.
azért is tettem a video irq elejére, amúgy lehet a mostani teszt verzióban se villogna, ha elől lenne :-)  A lefuto el figyelese jó ötlet, ha beallitom fixen az egész aktív képre a vint bitet, csak az otolso 100 sorra nem az jó megoldás is rá, nem ?
Viszont ezzel a megoldással bonyolultabb, legalábbis annak érzem, a két ciklusvaltozo szamolasi értéke, mert mind a kettőnek változnia kell különböző vezerlesi frekvenciaknal, hogy a lehető legpontosabbak legyünk.

szerk.: vagyis jó lenne a második ciklus értékét is valtozova tenni a vezerlesi  frekvenciatől függően, 100Hz fölött 2 és 200 Hz és afölött, törölni a második ciklust,ha másképp nem megy, egy ugro utasítással, de szerintem simán lehet kodmodositassal.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.13. 18:03:55
Viszont ezzel a megoldással bonyolultabb, legalábbis annak érzem, a két ciklusvaltozo szamolasi értéke, mert mind a kettőnek változnia kell különböző vezerlesi frekvenciaknal, hogy a lehető legpontosabbak legyünk.

Ez eddig is így lett volna, de most rosszabb a pontosság vagy nagyobb tartományban kell keresni. Például:

12500, 50 Hz: 12500 / 50 / 5 = 250 / 5 = 50
12500, 60 Hz: 12500 / 52 / 4 = 240.4 / 4 = 60.1
11905, 100 Hz: 11905 / 60 / 2 = 198.4 / 2 = 99.2
11364, 150 Hz: 11364 / 40 / 2 = 284.1 / 2 = 142
11364, 200 Hz: 11364 / 57 / 1 = 199.4 / 1 = 199.4
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.13. 18:23:48
A raszter megjelenítésén is lehetne módosítani, mivel annak a villogása okoz problémát, a teljes háttér mentése és visszaállítása helyett például csak egy vagy két sorban (előtte/utána az iránytól függően) visszaállítani az eredeti háttérszínt, amit lehetne fixen az egyik nem használt paletta színben is tárolni. Ez rövidebb ideig fut és kevésbé villog ha nem jó az időzítés.

A kivezérlésjelzőnél már említettem az egy LPB-s megoldást, ez ugyan nem sok időt takarít meg, de jobb a semminél.
Title: Re: SID lejátszó
Post by: geco on 2017.April.13. 18:48:11
A raszter megjelenítésén is lehetne módosítani, mivel annak a villogása okoz problémát, a teljes háttér mentése és visszaállítása helyett például csak egy vagy két sorban (előtte/utána az iránytól függően) visszaállítani az eredeti háttérszínt, amit lehetne fixen az egyik nem használt paletta színben is tárolni. Ez rövidebb ideig fut és kevésbé villog ha nem jó az időzítés.

A kivezérlésjelzőnél már említettem az egy LPB-s megoldást, ez ugyan nem sok időt takarít meg, de jobb a semminél.
Nagyon jó ötlet az előtte/mögötte szín visszaallitas, meg is csinálom majd holnap, ma sörözős, zsibbados nap van :-D
A kivezerlo egy LPB-s megvalósítását megnézem, már nem emlékszem pontosan miért csináltam külön LPB-sre, lehet helysporolas miatt, de az új megoldással az LPT-n is lehet spórolni, úgyhogy sztem menni fog.
Az 5,4,2,2,1 szimpi, vagy megnézem mi sül ki a 4,4,2,2,1-gyel kerekitessel.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.14. 11:51:07
Osztó kereső rutin:
[attachurl=1]    (javított verzió)

Lehet, hogy jobban is meg lehetett volna írni, de a fenti példáknál ugyanazt az eredményt adja mint az eredetileg használt Python script.

Szerk.: a 150 Hz-es példa pontosabb lehetne 11364 / 38 / 2 osztással (142 helyett 149.5 Hz).

Szerk. 2: a keresés pontossága javítható a bemeneti paramétereket (HL és DE) balra léptetve amíg a HL felső bitje nem 0.
Title: Re: SID lejátszó
Post by: geco on 2017.April.14. 20:17:37
Van egy kis gond, előre tettem a videó rutint (gyorsított mindennel), és még így is fagy 12,5KHz-en a Last Ninja 2 12-es számában, előbb jön egy hangvezérlés "megszakítás", és mikor már jól televágta a vermet az adatokkal, és elkezdi feldolgozni, jön egy videó "megszakítás", és ez már rossz helyre tér vissza. Vygy  a lapozás okozza a gondot, vagy a verem, mára elfáradtam, szerintem majd holnap nézegetem még.
Mit szólsz a gagyi megoldásomhoz?
Frekvenciának megfelelően beállítja a második ciklus értékét, majd ez az érték x (Dave osztó+1) x vezérlési frekvencia = az osztó
500000 / osztó / 2 , ha van carry, akkor felfelé kerekítés adja meg az első ciklus értékét.

Szerk.:
A lapozással van gond, lehet a vezérlő rutin elején ki kéne kapcsolni a visszalapozást, és a végén meg bekapcsolni?

Szerk. 2:
Hú de nehezen jöttem rá a megoldásra, az aktuális 2. lapot el kell menteni a verembe :ds_icon_cheesygrin: , probléma megoldva, csatoltam a forrást is, még a vezérlési sebességektől függő beállításokat módosítani kell a gagyi beállításomhoz is, pláne ha beépül a freqdiv.s.

Csatolmányok törölve.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.15. 11:14:51
Van egy kis gond, előre tettem a videó rutint (gyorsított mindennel)

Talán célszerűbb lenne először a vezérlést futtatni, akkor a video megszakítás nem zavarja a lejátszás időzítését, bár nem tudom, ez hallható különbséget jelent-e. A lenti módosítás ezt próbálja megoldani, de nem támogatja a második osztás és kijelzés nélküli speciális esetet. Viszont csak 50 Hz-es frekvencián figyeli a billentyűzetet, és a vezérlésen gyorsít egy keveset.

Quote
Hú de nehezen jöttem rá a megoldásra, az aktuális 2. lapot el kell menteni a verembe :ds_icon_cheesygrin: , probléma megoldva, csatoltam a forrást

Elvileg a 3. lap is problémát okozhatna, de ilyen eset az időzítés miatt talán nem fordulhat elő.

Quote
is, még a vezérlési sebességektől függő beállításokat módosítani kell a gagyi beállításomhoz is, pláne ha beépül a freqdiv.s.

Ennek az az előnye lenne, hogy tetszőleges frekvencián futhatna, és nem csak 50 Hz többszörösein fix osztókkal.

Ezeket a változtatásokat nem tudtam tesztelni, mert hiányzik a kép:
Code: Diff
  1. @@ -1887,12 +1887,12 @@
  2.  videoIRQHandler
  3.          push    bc
  4.          push    de
  5.          push    hl
  6. +        jp      nz,display
  7.  cyc2val ld      a,05h
  8.  cyc2off ld      (sidSynth.l23+1),a
  9. -dispon  jp      nz,displayonly
  10. -        call    c,display
  11. +        push    af
  12.  siddata ld      hl,0000h
  13.          inc     hl
  14.  ;        ld      (siddata+1),hl
  15.          ld      a,l
  16. @@ -1962,43 +1962,40 @@
  17.          ld      d,high (freqmulttable + 256)
  18.          ld      a,(de)
  19.          scf
  20.          adc     a,(hl)
  21. -        ld      e,a
  22.          inc     h
  23. -        ld      a,00h
  24. -        adc     a,(hl)
  25. -        ld      l,e
  26. +        ld      h, (hl)
  27. +        jr      nc, .l1
  28. +        inc     h
  29. +.l1:    srl     h
  30.          rra
  31. -        ld      h,a
  32. -        rr      l
  33. +        ld      l, a
  34.          pop     bc              ;b pulse waveform, c b7 ring mod, b6-b5 waveforms, b4-b0 volume (00h triangle, 20 sawtooth, 40h pulse, 60h noise)
  35.          ld      a,c
  36.          and     1fh
  37.          ld      (v1vol+1),a
  38. -        ld      d,b
  39. -;        and     80h
  40. -;        ld      e,a
  41. -        ld      b,high volumeConvTable
  42. -        ld      a,(bc)
  43. -        inc     b
  44. +        ld      e, c
  45. +        inc     d               ; D = high volumeConvTable
  46. +        ld      a,(de)
  47. +        inc     d               ; D = high ringmodtable
  48.          rra
  49.          jr      c,pulse1
  50.          ld      (otherw+2),a    ;triangle sawtooth noise
  51. -        ld      a,(bc)          ;xor a/and d
  52. +        ld      a,(de)          ;xor a/and d
  53.          di  
  54.          ld      (sidSynth.l1+1),hl
  55.          ld      hl,otherw
  56.          jp      wavtab1
  57.  pulse1  rrca                            ; * 8-bit d/a: add a, a (87h)
  58.          ld      (pulsevl+1),a   ;volume value
  59. -        ld      a,d
  60. +        ld      a,b
  61.          ld      (pulsew+1),a    ;pwm
  62. -        ld      a,(bc)          ;xor a/and d
  63. +        ld      a,(de)          ;xor a/and d
  64.          di  
  65.          ld      (sidSynth.l1+1),hl
  66.          ld      hl,pulsew
  67. -wavtab1 ;ld      a,e             ;ring mod
  68. +wavtab1 ;ld      a,(de)          ;ring mod
  69.          ld      (sidSynth.l2),a
  70.          ld      de,sidSynth.l3
  71.          ldi
  72.          ldi
  73. @@ -2040,43 +2037,40 @@
  74.          ld      d,high (freqmulttable + 256)
  75.          ld      a,(de)
  76.          scf
  77.          adc     a,(hl)
  78. -        ld      e,a
  79.          inc     h
  80. -        ld      a,00h
  81. -        adc     a,(hl)
  82. -        ld      l,e
  83. +        ld      h, (hl)
  84. +        jr      nc, .l1
  85. +        inc     h
  86. +.l1:    srl     h
  87.          rra
  88. -        ld      h,a
  89. -        rr      l
  90. +        ld      l, a
  91.          pop     bc              ;b pulse waveform, c b7 ring mod, b6-b5 waveforms, b4-b0 volume (00h triangle, 20 sawtooth, 40h pulse, 60h noise)
  92.          ld      a,c
  93.          and     1fh
  94.          ld      (v2vol+1),a
  95. -        ld      d,b
  96. -;        and     80h
  97. -;        ld      e,a
  98. -        ld      b,high volumeConvTable
  99. -        ld      a,(bc)
  100. -        inc     b
  101. +        ld      e, c
  102. +        inc     d               ; D = high volumeConvTable
  103. +        ld      a,(de)
  104. +        inc     d               ; D = high ringmodtable
  105.          rra
  106.          jr      c,pulse2
  107.          ld      (otherw+2),a    ;triangle sawtooth noise
  108. -        ld      a,(bc)          ;xor a/and d
  109. +        ld      a,(de)          ;xor a/and d
  110.          di  
  111.          ld      (sidSynth.l5+1),hl
  112.          ld      hl,otherw
  113.          jp      wavtab2
  114.  pulse2  rrca                            ; * 8-bit d/a: add a, a (87h)
  115.          ld      (pulsevl+1),a   ;volume value
  116. -        ld      a,d
  117. +        ld      a,b
  118.          ld      (pulsew+1),a    ;pwm
  119. -        ld      a,(bc)          ;xor a/and d
  120. +        ld      a,(de)          ;xor a/and d
  121.          di  
  122.          ld      (sidSynth.l5+1),hl
  123.          ld      hl,pulsew
  124. -wavtab2 ;ld      a,e             ;ring mod
  125. +wavtab2 ;ld      a,(de)          ;ring mod
  126.          ld      (sidSynth.l6),a
  127.          ld      de,sidSynth.l7
  128.          ldi
  129.          ldi
  130. @@ -2117,43 +2111,40 @@
  131.          ld      d,high (freqmulttable + 256)
  132.          ld      a,(de)
  133.          scf
  134.          adc     a,(hl)
  135. -        ld      e,a
  136.          inc     h
  137. -        ld      a,00h
  138. -        adc     a,(hl)
  139. -        ld      l,e
  140. +        ld      h, (hl)
  141. +        jr      nc, .l1
  142. +        inc     h
  143. +.l1:    srl     h
  144.          rra
  145. -        ld      h,a
  146. -        rr      l
  147. +        ld      l, a
  148.          pop     bc              ;b pulse waveform, c b7 ring mod, b6-b5 waveforms, b4-b0 volume (00h triangle, 20 sawtooth, 40h pulse, 60h noise)
  149.          ld      a,c
  150.          and     1fh
  151.          ld      (v3vol+1),a
  152. -        ld      d,b
  153. -;        and     80h
  154. -;        ld      e,a
  155. -        ld      b,high volumeConvTable
  156. -        ld      a,(bc)
  157. -        inc     b
  158. +        ld      e, c
  159. +        inc     d               ; D = high volumeConvTable
  160. +        ld      a,(de)
  161. +        inc     d               ; D = high ringmodtable
  162.          rra
  163.          jr      c,pulse3
  164.          ld      (otherw+2),a    ;triangle sawtooth noise
  165. -        ld      a,(bc)          ;xor a/and d
  166. +        ld      a,(de)          ;xor a/and d
  167.          di  
  168.          ld      (sidSynth.l9+1),hl
  169.          ld      hl,otherw
  170.          jp      wavtab3
  171.  pulse3  rrca                            ; * 8-bit d/a: add a, a (87h)
  172.          ld      (pulsevl+1),a   ;volume value
  173. -        ld      a,d
  174. +        ld      a,b
  175.          ld      (pulsew+1),a    ;pwm
  176. -        ld      a,(bc)          ;xor a/and d
  177. +        ld      a,(de)          ;xor a/and d
  178.          di  
  179.          ld      (sidSynth.l9+1),hl
  180.          ld      hl,pulsew
  181. -wavtab3 ;ld      a,e             ;ring mod
  182. +wavtab3 ;ld      a,(de)          ;ring mod
  183.          ld      (sidSynth.l10),a
  184.          ld      de,sidSynth.l11
  185.          ldi
  186.          ldi
  187. @@ -2190,8 +2181,88 @@
  188.  ;        ldi
  189.  
  190.  ;        ei
  191.  
  192. +        pop     af
  193. +        jp      nc, nokey
  194. +
  195. +display:
  196. +vidp1   ld      a,0ffh
  197. +        out     (0b3h),a
  198. +
  199. +;        ld      hl,intcnt
  200. +;        dec     (hl)
  201. +;        jr      nz,novolbardisp
  202. +;intcntx ld      (hl),00h
  203. +
  204. +volbhi  ;ld      de,0e01fh
  205. +        ld      d,0e0h
  206. +v1vol   ld      a,00h
  207. +;        and     e
  208. +        add     a,d
  209. +        ld      (lptaddr+4000h+(60-18h)*10h+75*10h+53*10h+05h),a    ;volume bar 1
  210. +v2vol   ld      a,00h
  211. +;        and     e
  212. +        add     a,d
  213. +        ld      (lptaddr+4000h+(60-18h)*10h+75*10h+55*10h+05h),a    ;volume bar 2
  214. +v3vol   ld      a,00h
  215. +;        and     e
  216. +        add     a,d
  217. +        ld      (lptaddr+4000h+(60-18h)*10h+75*10h+57*10h+05h),a    ;volume bar 3
  218. +novolbardisp
  219. +calrast jr      dataseg
  220. +restadd ld      hl,lptaddr+028h+4000h       ;c1b0 cbb0
  221. +        
  222. +counter ld      a,098h
  223. +        dec     a
  224. +        ld      (counter+1),a
  225. +        jr      nz,noend
  226. +        ld      a,098h
  227. +        ld      (counter+1),a
  228. +updwn   ld      a,0aah
  229. +        rrca
  230. +        ld      (updwn+1),a
  231. +        ld      bc,0010h
  232. +        jr      c,godown
  233. +        ld      bc,0fff0h
  234. +godown  ld      (rastadd+1),bc
  235. +noend  
  236. +rastadd ld      bc,0010h
  237. +        add     hl,bc
  238. +        ld      (restadd+1),hl
  239. +        ld      bc,0010h
  240. +        set     2,l
  241. +        ld      a,(hl)
  242. +        res     2,l
  243. +        ld      (hl),a
  244. +        add     hl,bc
  245. +        ld      (hl),80h+20h
  246. +ncol2   add     hl,bc
  247. +        ld      (hl),10h+20h
  248. +ncol3   add     hl,bc
  249. +        ld      (hl),90h+20h
  250. +ncol4   add     hl,bc
  251. +        ld      (hl),02h+20h
  252. +ncol5   add     hl,bc
  253. +        ld      (hl),082h+20h
  254. +ncol6   add     hl,bc
  255. +        ld      (hl),082h+20h
  256. +ncol7   add     hl,bc
  257. +        ld      (hl),02h+20h
  258. +ncol8   add     hl,bc
  259. +        ld      (hl),90h+20h
  260. +ncol9   add     hl,bc
  261. +        ld      (hl),10h+20h
  262. +ncol10  add     hl,bc
  263. +        ld      (hl),80h+20h
  264. +        add     hl,bc
  265. +        set     2,l
  266. +        ld      a,(hl)
  267. +        res     2,l
  268. +        ld      (hl),a
  269. +dataseg ld      a,0ffh
  270. +        out     (0b3h),a
  271. +
  272.  nosndc  in      a,(0b5h)
  273.          inc     a
  274.          jr      nz,keyprs
  275.  nokey   pop     hl
  276. @@ -2331,103 +2402,11 @@
  277.  ;        nop        
  278.  ;        scf
  279.  ;        ret
  280.  
  281. -displayonly:
  282. -        ld      hl,nosndc
  283. -        push    hl
  284. -display:
  285. -        push    de
  286. -vidp1   ld      a,0ffh
  287. -        out     (0b3h),a
  288. -
  289. -;        ld      hl,intcnt
  290. -;        dec     (hl)
  291. -;        jr      nz,novolbardisp
  292. -;intcntx ld      (hl),00h
  293. -
  294. -volbhi  ;ld      de,0e01fh
  295. -        ld      d,0e0h
  296. -v1vol   ld      a,00h
  297. -;        and     e
  298. -        add     a,d
  299. -        ld      (lptaddr+4000h+(60-18h)*10h+75*10h+53*10h+05h),a    ;volume bar 1
  300. -v2vol   ld      a,00h
  301. -;        and     e
  302. -        add     a,d
  303. -        ld      (lptaddr+4000h+(60-18h)*10h+75*10h+55*10h+05h),a    ;volume bar 2
  304. -v3vol   ld      a,00h
  305. -;        and     e
  306. -        add     a,d
  307. -        ld      (lptaddr+4000h+(60-18h)*10h+75*10h+57*10h+05h),a    ;volume bar 3
  308. -novolbardisp
  309. -calrast jr      dataseg
  310. -restadd ld      hl,lptaddr+028h+4000h       ;c1b0 cbb0
  311. -        
  312. -counter ld      a,098h
  313. -        dec     a
  314. -        ld      (counter+1),a
  315. -        jr      nz,noend
  316. -        ld      a,098h
  317. -        ld      (counter+1),a
  318. -updwn   ld      a,0aah
  319. -        rrca
  320. -        ld      (updwn+1),a
  321. -        ld      bc,0010h
  322. -        jr      c,godown
  323. -        ld      bc,0fff0h
  324. -godown  ld      (rastadd+1),bc
  325. -noend  
  326. -rastadd ld      bc,0010h
  327. -        add     hl,bc
  328. -        ld      (restadd+1),hl
  329. -        ld      bc,0010h
  330. -        set     2,l
  331. -        ld      a,(hl)
  332. -        res     2,l
  333. -        ld      (hl),a
  334. -        add     hl,bc
  335. -        ld      (hl),80h+20h
  336. -ncol2   add     hl,bc
  337. -        ld      (hl),10h+20h
  338. -ncol3   add     hl,bc
  339. -        ld      (hl),90h+20h
  340. -ncol4   add     hl,bc
  341. -        ld      (hl),02h+20h
  342. -ncol5   add     hl,bc
  343. -        ld      (hl),082h+20h
  344. -ncol6   add     hl,bc
  345. -        ld      (hl),082h+20h
  346. -ncol7   add     hl,bc
  347. -        ld      (hl),02h+20h
  348. -ncol8   add     hl,bc
  349. -        ld      (hl),90h+20h
  350. -ncol9   add     hl,bc
  351. -        ld      (hl),10h+20h
  352. -ncol10  add     hl,bc
  353. -        ld      (hl),80h+20h
  354. -        add     hl,bc
  355. -        set     2,l
  356. -        ld      a,(hl)
  357. -        res     2,l
  358. -        ld      (hl),a
  359. -dataseg ld      a,0ffh
  360. -        out     (0b3h),a
  361. -        pop     de
  362. -ncol11  ret
  363. -
  364. -fillsquare
  365. -        xor     a
  366. -        ld      b,20h
  367. -.l1     inc     a
  368. -        ld      (hl),a
  369. -        inc     l
  370. -        dec     a
  371. -        add     a,e
  372. -        djnz    .l1
  373. -        ret
  374. -
  375.          defs    low -$
  376. +freqmulttable
  377. +        defs    0200h
  378.  volumeConvTable
  379.  ;        db      01h                  ,high triangletable+00,high triangletable+01,high triangletable+02,high triangletable+03,high triangletable+04,high triangletable+05,high triangletable+06
  380.  ;        db      high triangletable+07,high triangletable+08,high triangletable+09,high triangletable+10,high triangletable+11,high triangletable+12,high triangletable+13,high triangletable+14
  381.  ;        db      01h                  ,high sawtoothtable+00,high sawtoothtable+01,high sawtoothtable+02,high sawtoothtable+03,high sawtoothtable+04,high sawtoothtable+05,high sawtoothtable+06
  382. @@ -2439,10 +2418,8 @@
  383.          defs    0100h
  384.  ringmodtable    defs    80h,0afh
  385.          defs    80h,0a2h
  386.  ;b pulse waveform, c b7 ring mod, b6-b5 waveforms, b4-b0 volume (00h triangle, 20 sawtooth, 40h pulse, 60h noise)
  387. -freqmulttable
  388. -        defs    0200h
  389.          dephase
  390.          
  391.  savexos defs    syntlen
  392.  
  393. @@ -2533,23 +2510,23 @@
  394.          xor     a
  395.          ld      (raston+4000h+1),a
  396.          ld      a,18h           ;jr xxxx
  397.  setrast ld      (calrast+4000h),a
  398. -        ld      a,b
  399. -        dec     a
  400. -        ld      a,3ah
  401. -        ld      (cyc2off+4000h),a
  402. -        ld      a,021h          ;ld hl,xxxx
  403. -        ld      hl,intend1
  404. -        jr      z,cyc2v00
  405. +;       ld      a,b
  406. +;       dec     a
  407. +;       ld      a,3ah
  408. +;       ld      (cyc2off+4000h),a
  409. +;       ld      a,021h          ;ld hl,xxxx
  410. +;       ld      hl,intend1
  411. +;       jr      z,cyc2v00
  412.          ld      a,32h
  413.          ld      (cyc2off+4000h),a
  414.          ld      a,b
  415.          ld      (intendx+1),a
  416.          ld      (cyc2val+1+4000h),a
  417.          ld      hl,intendx
  418. -        ld      a,0c2h          ;jp z,xxxx
  419. -cyc2v00 ld      (dispon+4000h),a
  420. +;       ld      a,0c2h          ;jp nz,xxxx
  421. +;cyc2v00 ld      (dispon+4000h),a
  422.          push    bc
  423.          push    bc
  424.          ld      de,intcopy      ;sidSynth.l23
  425.          ld      bc,000ch

A VINT hosszúságát szerintem nem érdemes 156 sornál nagyobbra állítani, a figyelésénél a 0 és az 1 állapot is fontos, 50% kitöltési tényezőnél lehet a legritkábban tesztelni megszakítás elvesztése nélkül.

Van egy kis gond, előre tettem a videó rutint (gyorsított mindennel), és még így is fagy 12,5KHz-en a Last Ninja 2 12-es számában, előbb jön egy hangvezérlés "megszakítás", és mikor már jól televágta a vermet az adatokkal

Ha kevés a hely a veremben, akkor a jelenleg 75h címen kezdődő kód kerülhetne az IRQ rutin elé is, az EXOS terület már egyébként is felülíródik.
Title: Re: SID lejátszó
Post by: geco on 2017.April.15. 11:45:13
Talán célszerűbb lenne először a vezérlést futtatni, akkor a video megszakítás nem zavarja a lejátszás időzítését, bár nem tudom, ez hallható különbséget jelent-e. A lenti módosítás ezt próbálja megoldani, de nem támogatja a második osztás és kijelzés nélküli speciális esetet. Viszont csak 50 Hz-es frekvencián figyeli a billentyűzetet, és a vezérlésen gyorsít egy keveset.
Igen ,erre gondoltam én is, csak attól tartottam ,hogy akkor meg villog, mert a vezérlés a leghosszabb, bár a VINT bites range mozgatásával ez is orvosolható, mert nagyjából konstans hosszú a vezérlés :)
Elvileg a 3. lap is problémát okozhatna, de ilyen eset az időzítés miatt talán nem fordulhat elő.
Igen, ilyen még nem fordult elő, ezért nem bolygattam :)

Ennek az az előnye lenne, hogy tetszőleges frekvencián futhatna, és nem csak 50 Hz többszörösein fix osztókkal.
Miután említetted a tetszőleges frekvenciát a ciklusos megoldásnál, jutott eszembe, hogy ezt így is meg lehetne csinálni, nem tudom gyakorlatban mekkora jelentősége van, van-e olyan SID, ami extrém vezérlési frekvenciát használ, annyi, hogy a turbós gépekre még nincs kész a ciklus érték módosítás, azon még egylőre csak gondolkoztam, a legpontosabb talán az lenne, ha az 500000-es osztót szoroznánk fel a sebesség függvényében, és utána osztani, és a kapott értéknek függvényében beállítani a két ciklusváltozót, a legegyszerűbb meg a kapott ciklusáltozókkal játszani a gép sebességétől függően.

Ezeket a változtatásokat nem tudtam tesztelni, mert hiányzik a kép:
Bocs, nem szeretem annyira az INCLUDE-ot, meg INCBIN-t használni, mert mindig megfeledkezem a fájlokról, most pótlom.

A VINT hosszúságát szerintem nem érdemes 156 sornál nagyobbra állítani, a figyelésénél a 0 és az 1 állapot is fontos, 50% kitöltési tényezőnél lehet a legritkábban tesztelni megszakítás elvesztése nélkül.

Ha kevés a hely a veremben, akkor a jelenleg 75h címen kezdődő kód kerülhetne az IRQ rutin elé is, az EXOS terület már egyébként is felülíródik.
Jogos, én csak azt tartottam szem előtt, hogy képen való ténykedés véletlenül se történjen, amikor épp azon jár az elektronsugár, amúgy a ciklusváltozóink miatt a jelenlegi beállítás mellett se volt bukta :)
Egyelőre nem volt gond a verem mérettel, mindig a lapozás okozta galiba miatt írta túl azt is, most kb 110 byte van szabadon a veremre.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.15. 11:58:37
Miután említetted a tetszőleges frekvenciát a ciklusos megoldásnál, jutott eszembe, hogy ezt így is meg lehetne csinálni, nem tudom gyakorlatban mekkora jelentősége van, van-e olyan SID, ami extrém vezérlési frekvenciát használ, annyi, hogy a turbós gépekre még nincs kész a ciklus érték módosítás, azon még egylőre csak gondolkoztam, a legpontosabb talán az lenne, ha az 500000-es osztót szoroznánk fel a sebesség függvényében, és utána osztani, és a kapott értéknek függvényében beállítani a két ciklusváltozót, a legegyszerűbb meg a kapott ciklusáltozókkal játszani a gép sebességétől függően.

A freqdiv.s egyszerűen minden lehetséges osztóval próbálkozik egy bizonyos tartományban, és azt használja, amelyikkel a legpontosabb a frekvencia  (egyenlő pontosságnál pedig azt, amelyikkel az első osztó nagyobb). Ez kissé pazarló megoldás, bár a 40 és 62 közötti kereséssel 22-25 ms a futásideje (156 soros VINT esetén nagyobb értékek is lehetnének). Esetleg kereshetne a második osztó alapján, annak kisebb a használható tartománya, 1-10 elég lenne turbós gépeken is.
Title: Re: SID lejátszó
Post by: geco on 2017.April.15. 12:13:10
A freqdiv.s egyszerűen minden lehetséges osztóval próbálkozik egy bizonyos tartományban, és azt használja, amelyikkel a legpontosabb a frekvencia  (egyenlő pontosságnál pedig azt, amelyikkel az első osztó nagyobb). Ez kissé pazarló megoldás, bár a 40 és 62 közötti kereséssel 22-25 ms a futásideje (156 soros VINT esetén nagyobb értékek is lehetnének). Esetleg kereshetne a második osztó alapján, annak kisebb a használható tartománya, 1-10 elég lenne turbós gépeken is.
Jó ötlet, nekem tegnap az jutott eszembe, amikor megláttam a freqdiv.s-t, hogy adhatná a második osztót, és az alapján már külön lenne számítva az első a 150 Hz pontatlansága miatt.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.15. 14:30:01
Továbbfejlesztett freqdiv.s:
[attachurl=1]

Megkeresi a legjobb pontosságot (vagy azonos pontosságnál kisebb CPU használatot) eredményező osztókat amelyekkel az alábbi (egyszerűen módosítható) feltételek teljesülnek:
- első osztó 50 és 255 között
- az ezzel osztott frekvencia >= 125 Hz (VINT teszt legfeljebb 8 ms időközönként)
- második osztó 1 és 10 között
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.15. 19:01:05
Újabb próbálkozás:
[attachurl=1]    (szerk.: javítottam az LPT hibákat)
Title: Re: SID lejátszó
Post by: geco on 2017.April.16. 10:36:52
Továbbfejlesztett freqdiv.s:
Megkeresi a legjobb pontosságot (vagy azonos pontosságnál kisebb CPU használatot) eredményező osztókat amelyekkel az alábbi (egyszerűen módosítható) feltételek teljesülnek:
- első osztó 50 és 255 között
- az ezzel osztott frekvencia >= 125 Hz (VINT teszt legfeljebb 8 ms időközönként)
- második osztó 1 és 10 között
Nagyon jól hangzik, egyelőre még csak letöltöttem, remélem holnap lesz időm egy picit foglalkozni vele, no meg az LPT hibák javítását is :), kíváncsi vagyok mit szúrtam el :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.17. 14:15:01
Nagyon jól hangzik, egyelőre még csak letöltöttem, remélem holnap lesz időm egy picit foglalkozni vele, no meg az LPT hibák javítását is :), kíváncsi vagyok mit szúrtam el :)

Az LPT-t valójában részben én rontottam el, de a státuszsor korábban is hibás volt (margók).

Kisebb optimalizálás az előző változathoz képest, de kevesebb szabad hely marad a vermben (-5 byte):
[attachurl=1]

A kicsomagolásra várakozás hibás volt, ezt javítottam, néhány további (minimális) optimalizálás mellett.
[attachurl=2]
Title: Re: SID lejátszó
Post by: geco on 2017.April.17. 21:27:11
Az LPT-t valójában részben én rontottam el, de a státuszsor korábban is hibás volt (margók).
Átállítottam a 46-os szélességre? :oops:
Kisebb optimalizálás az előző változathoz képest, de kevesebb szabad hely marad a vermben (-5 byte):
Az szerintem még bőven belefér :), akkor lehetnénk szerintem bajba, ha vezérlés alatt meghívódna a vezérlés még párszor :D
A kicsomagolásra várakozás hibás volt, ezt javítottam, néhány további (minimális) optimalizálás mellett.
hm, ki tudja milyen hibákat vétettem még? :oops:
A héten csekkolom :)
Title: Re: SID lejátszó
Post by: Zozosoft on 2017.April.17. 21:29:59
Erről jut eszembe, hogy a szövegeket lehetne 1-2 karakterrel beljebb tenni, mert némely monitoron kilóg :oops:
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.17. 21:45:40
Átállítottam a 46-os szélességre?

Akkor fordul elő probléma, ha a státuszsor eredetileg nem volt látható, ilyenkor az EXOS a jobb margót 51 helyett 52-re állítja. A lejátszó pedig a bal margót 11-re, így azonban 41 karakter jelenik meg és az utolsó szemét lehet. A javítás mindkét margót állítja (11 és 51).

Quote
Az szerintem még bőven belefér :), akkor lehetnénk szerintem bajba, ha vezérlés alatt meghívódna a vezérlés még párszor :D

Az újabb változatban (további kód növekedés után) már átkerült 0000h kezdőcímre, így a hely biztosan nem probléma. :) Bár valószínűleg a módosítás nélkül sem lett volna.

Quote
hm, ki tudja milyen hibákat vétettem még?

Ez a hiba az egyik korábbi változtatásom eredménye volt :oops:, hiányzott egy POP AF.
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 08:38:33
Az újabb változatban (további kód növekedés után) már átkerült 0000h kezdőcímre, így a hely biztosan nem probléma. :) Bár valószínűleg a módosítás nélkül sem lett volna.
:)
Ez a hiba az egyik korábbi változtatásom eredménye volt :oops:, hiányzott egy POP AF.
Pedig hibákat én szoktam véteni ;)

Erről jut eszembe, hogy a szövegeket lehetne 1-2 karakterrel beljebb tenni, mert némely monitoron kilóg :oops:
Megnézem hogy néz ki, és annak függvényében elintézem az 1, vagy két karakteres tolást. :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 08:55:31
:)Pedig hibákat én szoktam véteni ;)
Megnézem hogy néz ki, és annak függvényében elintézem az 1, vagy két karakteres tolást. :)

Még lehetne javítani hogy a sidSynth.irqRet1 helyett a "display" előtti POP AF-re ugorjon, így a várakozás közben működik a kijelzés és a billentyűzet is, bár ezek nélkül valamivel rövidebb a várakozás. Egyébként az IK lejátszása közben 2-3 másodperc közötti kicsomagolási idők fordulnak elő, a 150 Hz-es Paperboy esetében általában 1 másodperc alattiak, a 200 Hz-es HVSC-nél pedig 1 másodpercnél valamivel hosszabbak.

Szerk.: az "emu" konfiguráció nem működik (ilyennel még nem próbáltam), ezt hamarosan javítom.
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 10:13:23
Ezek a kicsomagolási idők teljesen jók, még a régebbi verziónál úgy emlékszem 3-4 másodperc előfordult 50Hz-en.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 11:16:00
Emulátoros konfiguráció javítva, illetve egyszerűbb is lett a kód, mivel mindig a getSIDPlaybackFreq-t használja a tényleges mintavételezési frekvencia mérésére. Kicsomagolásra várakozás közben működik a video megszakítás, és a 11905 Hz-es lejátszási frekvenciát 120 Hz-ig használja a program (bár nem tudom, valóban van-e 120 Hz-es file).

[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 11:30:36
Emulátoros konfiguráció javítva, illetve egyszerűbb is lett a kód, mivel mindig a getSIDPlaybackFreq-t használja a tényleges mintavételezési frekvencia mérésére. Kicsomagolásra várakozás közben működik a video megszakítás, és a 11905 Hz-es lejátszási frekvenciát 120 Hz-ig használja a program (bár nem tudom, valóban van-e 120 Hz-es file).
:smt041
Ezen már gondolkoztam én is, hogy a köztes frekvenciáknak van-e értelme, de elméletileg lehet olyan elvetemült SID, ami mondjuk 110Hz-es megszakításon ketyeg, vagy épp 140-en :D
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 13:28:21
Összevetettem a változásokat, tök jó csomót egyszerűsödött a ciklusváltozók számítása, a vezérlés is gyorsult egy picit :) , ha jól látom, most 40-300Hz között fogad el vezérlést, gyakorlatban nem lehet olyan SID, ami mondjuk 25Hz-es vezérléssel bír, és 300Hz fölötti? Vagy ez a ciklisváltozók számítása miatt lett ez a range?
Egy dolgot nem értek, a kód bugászása után sem, hogy a sidSynth (0000h)-n mi célt szolgál a 3 RET ? :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 13:46:28
ha jól látom, most 40-300Hz között fogad el vezérlést, gyakorlatban nem lehet olyan SID, ami mondjuk 25Hz-es vezérléssel bír, és 300Hz fölötti?

25 Hz még működne 20 MHz-es gépen is (62500 / 250 / 10 Hz), tehát a 40 Hz minimum különösebb probléma nélkül 25-re csökkenthető. Bár a konvertáló programok jelenleg nem fogadnak el 50 Hz alatti sebességet. :oops: A 300 Hz valójában már nem működik 4 MHz-es gépen az első osztó 50-255 tartományra korlátozása miatt, ez a verzió csak 11364 / 50 = 227 Hz-ig használható, amit még javítani kellene.

Quote
Egy dolgot nem értek, a kód bugászása után sem, hogy a sidSynth (0000h)-n mi célt szolgál a 3 RET ? :)

Csak az IRQ rutin 0038h-ra igazítását, a hely kitöltése lehetne előtte is, vagy RET helyett nullákkal. Vagy 0000h helyett 0003h kezdőcím, de akkor azt módosításnál több helyen is változtatni kellene.
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 13:57:41
25 Hz még működne 20 MHz-es gépen is (62500 / 250 / 10 Hz), tehát a 40 Hz minimum különösebb probléma nélkül 25-re csökkenthető. Bár a konvertáló programok jelenleg nem fogadnak el 50 Hz alatti sebességet. :oops: A 300 Hz valójában már nem működik 4 MHz-es gépen az első osztó 50-255 tartományra korlátozása miatt, ez a verzió csak 11364 / 50 = 227 Hz-ig használható, amit még javítani kellene.
És mintha ezt említetted is volna, nem kell javítani a konvertáló programokon, nagyon jók, ahogy vannak :) , nem tudom a konvertálásom alatt dobott-e ki alacsony vezérlési frekvenciát, szerintem nem, igaz nagyüzemben konvertáltam, nem figyeltem, 99%-ban a sikertelen konvertálások RSID-ek voltak.
Gondolom a második osztó növelésével ez megoldható lenne.
Csak az IRQ rutin 0038h-ra igazítását, a hely kitöltése lehetne előtte is, vagy RET helyett nullákkal. Vagy 0000h helyett 0003h kezdőcím, de akkor azt módosításnál több helyen is változtatni kellene.
Így már mindent értek :) A RET-ek miatt volt gyanús, azt hittem van valami funkciójuk is.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 14:03:17
A 300 Hz támogatására a legegyszerűbb megoldás itt (findFreqDiv) az 50-et 38-ra cserélni:
Code: ZiLOG Z80 Assembler
  1.         ld    a, c
  2.         cp    50
  3.         jr    c, .l6                    ; div1 < 50?
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 14:11:57
A 300 Hz támogatására a legegyszerűbb megoldás itt (findFreqDiv) az 50-et 38-ra cserélni:
Code: ZiLOG Z80 Assembler
  1.         ld    a, c
  2.         cp    50
  3.         jr    c, .l6                    ; div1 < 50?
Oké, módosítottam is.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 14:36:32
Az ideális megoldás az lenne, hogy ne legyen alsó határ akkor, amikor a második osztó (div2) 1. Az 50 helyett 38 egyszerűbb, de előfordulhat, hogy minimálisan jobb pontosságért kevésbé CPU hatékony osztást választ a rutin, vagy akár kerekítési hibák miatt például 76*1 helyett 38*2-t.

Szerk.: 25 Hz minimum frekvencia, és a 300 Hz-es bug javítva:
[attachurl=1]
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 19:09:50
A legfrissebb verzióban valami nem stimmel, az 50Hz-es SID-ek mindig jók, két gyorsabb SID-del szoktam tesztelni, a Paperboy, és a HVSC az alanyok, lejátszó betöltése után jók, viszont egy 50Hz-es után már rosszak a az osztók, mintha az első ciklusváltozó maradna az 50Hz-esé, a második pedig 1-re vált.
Lehet megtaláltam a javítást, amikor visszaírom a következőt új számítás előtt 0ffffh-ra, akkor jó lesz a számítás:
Code: [Select]
.l4:    ld    bc, 0ffffh                ; * err
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 19:22:43
Ez a rész hibás:
Code: ZiLOG Z80 Assembler
  1. findFreqDiv:
  2.         ld    a, 10h
  3. .l1:    sla   e
  4.         rl    d
  5.         add   hl, hl
  6.         rla
  7.         jr    nc, .l1
  8.         ld    (.l3 + 1), hl
  9.         ld    (.l3 + 4), a
  10.         ld    (.l2 + 1), de
  11.         sbc   a, a                      ; Carry = 1
  12.         ld    (.l4 + 1), a
Itt már eredetileg is visszaállítaná a kezdőértéket, csak .l4+1 helyett .l4+2-re kellett volna írni (az alsó byte nem lényeges, FF00h-nál is biztosan kisebb a frekvencia hiba).
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 19:31:18
Értem, akkor nem írom át két bájtos felülírásra :) Átböktem (.l4 + 2)-re, meg állítottam a feliraton, a szöveg egy karakterrel beljebb kezdődik, és eggyel hamarabb fejeződik be. Tekinthetjük ezt a verziót a véglegesnek? Ha igen, akkor csomagolom, meg a ROM verziót is megcsinálom, egyelőre úgy néz ki, hogy csütörtökön.
Amúgy minden tök jó, teszteltem turbó módokkal, magnós, és EXDOS-os konfiggal.

Csatolmány törölve
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 19:34:37
Valójában nem csak ott van hiba, a D használata a legjobb osztó tárolására (ami csak a legújabb verzióba került) okoz problémát, az .l4-nél az FFh kezdőérték (255/16 Hz eltérés, a gyakorlatban ilyen sem fordul elő) is jó lenne.
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 19:41:22
Valójában nem csak ott van hiba, a D használata a legjobb osztó tárolására (ami csak a legújabb verzióba került) okoz problémát, az .l4-nél az FFh kezdőérték (255/16 Hz eltérés, a gyakorlatban ilyen sem fordul elő) is jó lenne.
Ezt most nem értem, az .l4-nél a kezdőérték alapból 0ffffh, aztán minden új számolásnál 0ffxxh, és nem tapasztaltam hibát :)
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 19:51:16
Ezt most nem értem, az .l4-nél a kezdőérték alapból 0ffffh, aztán minden új számolásnál 0ffxxh, és nem tapasztaltam hibát :)

Azzal volt még probléma, hogy a D-be került az addig talált legjobb osztó, az E-be pedig a ciklusban éppen aktuális, de van egy osztás a DE 16 bites értékével, így a számított frekvencia eltérés rossz. Bár így is találhatott használható (ha nem is feltétlenül optimális) osztókat.

Mindenesetre ez már talán jól működik:
[attachurl=1]
Title: Re: SID lejátszó
Post by: ergoGnomik on 2017.April.18. 19:54:37
:smt041
Ezen már gondolkoztam én is, hogy a köztes frekvenciáknak van-e értelme, de elméletileg lehet olyan elvetemült SID, ami mondjuk 110Hz-es megszakításon ketyeg, vagy épp 140-en :D
Amennyire tudom, a teljesen "szabálytalan" frekvenciák egyáltalán nem jellemzőek. A szaporábban frissített zenéknél is a képfrekvencia egész-számú többszöröse szokott lenni a lejátszó hívásainak gyakorisága. És tényleg létezik (bár nagyon kevés) 25 Hz-es zene is. A múltkor küldtem is neked PM-ben néhány kiemelt bejegyzést a HVSC STIL.txt-jéből, mint példát extremitásokra. A játékprogramozók rendszerint örülnek, ha raszterlefutásonként egyszer gond nélkül meg lehet hívni a zenerutint. A demósok meg nagyon nem szeretik, ha a képfelépítés szinkronjától függetlenül össze-vissza mászkál időben a lejátszó rutin, mert megzavarhatja a rasztertrükköket, és ráadásul még a hallgatni is rossz lesz az ütköző prioritású programrészek miatt a zenét.
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 20:00:15
És tényleg létezik (bár nagyon kevés) 25 Hz-es zene is. A múltkor küldtem is neked PM-ben néhány kiemelt bejegyzést a HVSC STIL.txt-jéből, mint példát extremitásokra.
És tényleg, már emlékszem is, volt köztük legalább egy, ami 25Hz-es volt. :)
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 20:03:03
Azzal volt még probléma, hogy a D-be került az addig talált legjobb osztó, az E-be pedig a ciklusban éppen aktuális, de van egy osztás a DE 16 bites értékével, így a számított frekvencia eltérés rossz. Bár így is találhatott használható (ha nem is feltétlenül optimális) osztókat.
findFreqDiv_ végén a
        ld    a, c                      ; * div1
-re szükség van? Mert findFreqDiv_ visszatérése után úgyis egy SBC A,A a következő A regisztert érintő utasítás.

Amúgy jó :). leteszteltem 4 MHz-en, 8 MHz normál EP-s konfiggal, és 8 MHz emu konfiggal, és vegyesen 50Hz-es, 150Hz-es és 200Hz-es SID-del.
Title: Re: SID lejátszó
Post by: IstvanV on 2017.April.18. 20:06:38
findFreqDiv_ végén a
        ld    a, c                      ; * div1
-re szükség van? Mert findFreqDiv_ visszatérése után úgyis egy SBC A,A a következő A regisztert érintő utasítás.

Valóban törölhető (és a rutin előtt a megjegyzésből is az A), lehet csak a C-ben is.
Title: Re: SID lejátszó
Post by: geco on 2017.April.18. 20:12:50
Valóban törölhető (és a rutin előtt a megjegyzésből is az A), lehet csak a C-ben is.
Csak kommenteltem :) , a szöveg eltolás maradt itt is, valójában az eltolt szöveges forrásba vittem fel az osztó módosításait :)
Title: Re: SID lejátszó
Post by: endi on 2017.April.18. 20:16:28
úgy nézem ti megalkotjátok A Tökéletes Programot.
vagy majd megalkotjátok. 10 év múlva is pörögni fog ez a topik :)
Title: Re: SID lejátszó
Post by: Mayer Gábor on 2017.April.18. 21:01:38
Üdv, Keresem a mekkmester zenéjét freki, hossz, szünet, hossz formátumban. Köszi
Title: Re: SID lejátszó
Post by: Ep128 on 2017.April.18. 23:47:24
Üdv, Keresem a mekkmester zenéjét freki, hossz, szünet, hossz formátumban. Köszi

Nekem megvan az eredeti és a "metálosított" feldolgozás is... :-D (De csak normál MP3, és MOD formátumban. :-) )
Title: Re: SID lejátszó
Post by: geco on 2017.April.20. 18:25:55
Megcsináltam a ROM verziót, és becsomagoltam a SIDBasic V1.1 normál verzióját, teszteljétek, ha minden rendben, megy  a letöltések közé.
Title: Re: SID lejátszó
Post by: endi on 2018.July.18. 12:59:58
specy:
https://youtu.be/x13mGfnpxGE
Title: Re: SID lejátszó
Post by: geco on 2020.March.13. 18:55:34
TVC verzió, zajos háromszög, és a fűrészjel, de vannak jól szóló M64-ek.
Elméletileg lemezes rendszer esetén a DIR listából lehet választani (Ez nekem emulátoron működött) ,nincs könyvtár támogatás, mert a DIR /W nem listázza őket.

Kezelés:
Lemezes rendszer esetén fájl választása: int joy/ext1 joy + Space/tűz
új fájl betöltése: Esc
Kilépés a programból: CTRL (ez csak lejátszás közben működik, fájl választás közben jöhet a meleg reset, amivel nem érdemes lejátszás közben próbálkozni, mert jó kis hideg reset jöhet utána, a program felülírja 0000h-0080h-t lejátszás közben)

4 verzió van, ami valójában csak kettő, lemezes rendszeren 236-os errort (fájl vége utáni olvasás) kaptam, ezért megpecseltem a TVCTAPE által generált fájlban a hosszt , ami teljesen jónak tűnt, nem is értem miért panaszkodott a TVC.
Nem tudom valakinek van-e real TVC-je, érdekelne, hogy azon megy-e :D :D

SIDBTVC1.CAS sample rate 11488 Hz. ezzel a lassabb vezérléssel bíró SID-ek jól működtek (50-100Hz)
SIDBTVC2.CAS sample rate 10279 Hz. ezzel a gyorsabb vezérléssel bíró SID-ek is jól működtek (300Hz)
SIDBTVC3.CAS ua, mint SIDBTVC1.CAS, csak csökkentett fájl mérettel a headerben
SIDBTVC4.CAS ua, mint SIDBTVC2.CAS, csak csökkentett fájl mérettel a headerben
Title: Re: SID lejátszó
Post by: szipucsu on 2020.March.13. 19:42:46
TVC verzió
Azt a mindenit! :shock:
A TVC64emuval (EP128Emu része) működik, szépen szól!
Itt egy snapshot:
[attach=1]
És még marad CPU idő a Commodore feliratot is görgetni! Próbáltam a WinTVC-vel is, de az minden áron magnóról akarna tovább tölteni, ahhoz nem értek.
Facebookon nem vagy fent? Ott van a TVC-seknek csoportja, ott lehetne megmutatni nekik.

DAVEbasicTVC-t nem akarsz csinálni? A sztereó hangot nem is, talán a többit valamennyire vinné a TVC... vagy nem.
Title: Re: SID lejátszó
Post by: Zozosoft on 2020.March.13. 19:51:39
Nem tudom valakinek van-e real TVC-je, érdekelne, hogy azon megy-e :D :D
Jövő héten meg tudom nézni.
Title: Re: SID lejátszó
Post by: geco on 2020.March.13. 20:21:25
Jövő héten meg tudom nézni.
Köszi. ☺
Title: Re: SID lejátszó
Post by: geco on 2020.March.13. 20:31:21
És még marad CPU idő a Commodore feliratot is görgetni! Próbáltam a WinTVC-vel is, de az minden áron magnóról akarna tovább tölteni, ahhoz nem értek.
Facebookon nem vagy fent? Ott van a TVC-seknek csoportja, ott lehetne megmutatni nekik.

DAVEbasicTVC-t nem akarsz csinálni? A sztereó hangot nem is, talán a többit valamennyire vinné a TVC... vagy nem.
Én is csak az ep128emuval probaltam, mas TVC emu nincs feltéve a gépemre.
A mozgatas szinte nem is visz idot, csak az egyik CRTC regisztert irja a program ☺
Fent vagyok, de ritkan latogatom, es nem vagyok tagja a csoportnak 😁
Nem tudom, hogy szolhatna, raadasul az erdekesebb hangzasoktol esne el, no meg kene egy program is hozza, amivel a dave regisztereket mentenenk.
Title: Re: SID lejátszó
Post by: szipucsu on 2020.March.17. 17:56:00
TVC verzió
Ennek mi lesz majd a címe? Commodore-Videoton (CoVid!) Music Player?
Title: Re: SID lejátszó
Post by: geco on 2020.March.18. 08:03:22
Ennek mi lesz majd a címe? Commodore-Videoton (CoVid!) Music Player?
Jó ötlet :D COVID20 :D
Title: Re: SID lejátszó
Post by: Zozosoft on 2020.March.20. 15:45:31
4 verzió van, ami valójában csak kettő, lemezes rendszeren 236-os errort (fájl vége utáni olvasás) kaptam, ezért megpecseltem a TVCTAPE által generált fájlban a hosszt , ami teljesen jónak tűnt, nem is értem miért panaszkodott a TVC.
Nem tudom valakinek van-e real TVC-je, érdekelne, hogy azon megy-e :D :D
Igazi gépen is 236-os hiba az első kettővel, a pecseltek jók.
És elég jól szólnak! :smt038
Title: Re: SID lejátszó
Post by: geco on 2020.March.20. 16:01:58
Igazi gépen is 236-os hiba az első kettővel, a pecseltek jók.
És elég jól szólnak! :smt038
Kúúúl, köszi szépen :)
Title: Re: SID lejátszó
Post by: szipucsu on 2020.March.22. 21:09:22
Lehetne most zenéket írni EP-re és TVC-re is egyben. Egy közös formátum lett. Bár engem a SID ennyire, ilyen szinten nem mozgat meg, csak a Dave.
Title: Re: SID lejátszó
Post by: Zozosoft on 2020.March.26. 08:01:31
TVC-sek konvertáltak egy nagy adag M64 fájlt. (http://tvc.hu/cas/2020/HVSC72_M64.zip)
Title: Re: SID lejátszó
Post by: Tutus on 2020.March.26. 09:57:25
TVC-sek konvertáltak egy nagy adag M64 fájlt. (http://tvc.hu/cas/2020/HVSC72_M64.zip)
Ez szuper, de ehhez már hely kellene az SD kártyán :) Tényleg, hol tart a FAT16-os EXDOS 3.0? :oops:
Title: Re: SID lejátszó
Post by: szipucsu on 2022.September.15. 18:41:42
Geco, a lejátszóba lehetne tenni a SID hullámformáin kívül vagy azok helyett más hullámformákat is? Azért kérdezem, mert az FL Studióban van vagy 20 féle hullámforma az egyik pluginban, és talán meg lehetne próbálni néhányat, hogy EP-n hogyan szólnak. A hullámformák vizualizációit (oszcilloszkópos kép) onnan ki tudom lopni.
Title: Re: SID lejátszó
Post by: geco on 2022.September.16. 09:11:56
Hááát, betenni be lehet, de több dolog merül fel, a lejátszó 256 bájt hosszú samplékra van kialakítva, tehát ha azok mérete eltér, akkor alakítani kell rajtuk, az a tippem, hogy butítani, másik, oké, hogy lecseréljük a hullámformákat, de mivel készül hozzá új zene? Szerintem sokkal eccerűbb ha a Rockdigibe teszed be az új hullámformákat, és ott legalább zenét is lehet szerkeszteni.