Welcome, Guest. Please login or register.

Login with username, password and session length


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

Offline IstvanV

  • EP addict
  • *
  • Posts: 3498
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 51.0 Firefox 51.0
    • View Profile
Re: SID lejátszó
« Reply #690 on: 2017.March.20. 20:09:52 »
Ez valamennyire már működik:
* p4sidsynth.s (22.25 kB - downloaded 4 times.)
* p4sidsynth.prg (27.99 kB - downloaded 3 times.)    (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:
* p4sidsynth_ln2.prg (38.36 kB - downloaded 5 times.)

Offline balagesz

  • EP fan
  • *
  • Posts: 219
  • Country: hu
  • OS:
  • Linux (Fedora)) Linux (Fedora))
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
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: 3498
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 51.0 Firefox 51.0
    • View Profile
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 fan
  • *
  • Posts: 219
  • Country: hu
  • OS:
  • Linux (Fedora)) Linux (Fedora))
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
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: 3498
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 51.0 Firefox 51.0
    • View Profile
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):
* p4sidsynth.s (22.94 kB - downloaded 4 times.)
* sidbasic.prg (1.5 kB - downloaded 3 times.)
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ó:
* sidbasic.d64 (170.75 kB - downloaded 5 times.)

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).
* sidb8bit.plus4s (70.44 kB - downloaded 4 times.)
« Last Edit: 2017.March.22. 09:32:05 by IstvanV »

Offline IstvanV

  • EP addict
  • *
  • Posts: 3498
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 51.0 Firefox 51.0
    • View Profile
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:
* p4sidsynth.s (23.01 kB - downloaded 5 times.)
* p4sidsynth.prg (1.5 kB - downloaded 6 times.)
« Last Edit: 2017.March.22. 13:06:28 by IstvanV »

Offline balagesz

  • EP fan
  • *
  • Posts: 219
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
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: 3927
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
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: 3927
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
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: 5017
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 56.0.2924.87 Chrome 56.0.2924.87
    • View Profile
    • Honlapom
Re: SID lejátszó
« Reply #699 on: 2017.March.23. 16:32:41 »
videót kérünk! mindenről! :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 3498
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 51.0 Firefox 51.0
    • View Profile
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: Yesterday at 10:19 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 3927
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
Re: SID lejátszó
« Reply #701 on: Yesterday at 08:45 »
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: Yesterday at 08:49 by geco »

Offline IstvanV

  • EP addict
  • *
  • Posts: 3498
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 51.0 Firefox 51.0
    • View Profile
Re: SID lejátszó
« Reply #702 on: Yesterday at 09:25 »
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: Yesterday at 09:37 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 3927
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
Re: SID lejátszó
« Reply #703 on: Yesterday at 10:21 »
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: 3498
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 51.0 Firefox 51.0
    • View Profile
Re: SID lejátszó
« Reply #704 on: Yesterday at 10:27 »
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:
* sid_dump.cpp (22.69 kB - downloaded 2 times.)    (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: Yesterday at 11:19 by IstvanV »