Welcome, Guest. Please login or register.


Author Topic: SID lejátszó (Read 300048 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #690 on: 2017.March.20. 20:09:52 »
Ez valamennyire már működik:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]     (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:
[ Guests cannot view attachments ]

Offline balagesz

  • EP user
  • *
  • Posts: 279
  • Country: hu
Re: SID lejátszó
« Reply #691 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!

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #692 on: 2017.March.20. 22:13:47 »
Ezt mivel lehet lefordítani? :) (A "kedvenc" assemblerem nem eszi. :oops: )

CA65:

ca65 --target none p4sidsynth.s -o tmp.o
ld65 --target none tmp.o -o p4sidsynth.prg
cat m64/Gray_Matt/LASTNIN0.M64 >> p4sidsynth.prg

Offline balagesz

  • EP user
  • *
  • Posts: 279
  • Country: hu
Re: SID lejátszó
« Reply #693 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:

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #694 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):
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
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ó:
[ Guests cannot view attachments ]

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).
[ Guests cannot view attachments ]
« Last Edit: 2017.March.22. 09:32:05 by IstvanV »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #695 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:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
« Last Edit: 2017.March.22. 13:06:28 by IstvanV »

Offline balagesz

  • EP user
  • *
  • Posts: 279
  • Country: hu
Re: SID lejátszó
« Reply #696 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á. :)

Offline geco

  • EP addict
  • *
  • Posts: 7217
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #697 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.
« Last Edit: 2017.March.23. 15:39:13 by geco »

Offline geco

  • EP addict
  • *
  • Posts: 7217
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #698 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. )

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: SID lejátszó
« Reply #699 on: 2017.March.23. 16:32:41 »
videót kérünk! mindenről! :)
Vigyázat! Szektás vagyok! :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #700 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.
« Last Edit: 2017.March.24. 10:19:44 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7217
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #701 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. :)
« Last Edit: 2017.March.24. 08:49:28 by geco »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #702 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.
« Last Edit: 2017.March.24. 09:37:41 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7217
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #703 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.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #704 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:
[ Guests cannot view attachments ]    (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
« Last Edit: 2017.March.24. 11:19:38 by IstvanV »