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