Welcome, Guest. Please login or register.


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

Offline geco

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

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: SID lejátszó
« Reply #406 on: 2017.February.16. 09:00:44 »
Ha lesz majd kész, végleges csomag, akkor rakom majd a sok programos VHD-re is.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: SID lejátszó
« Reply #407 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?

Offline geco

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

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #409 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ó.
« Last Edit: 2017.February.17. 15:16:52 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #410 on: 2017.February.17. 14:53:55 »
Új verziójú SIDPlay V1.3, 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.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #411 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.
« Last Edit: 2017.February.18. 14:25:31 by IstvanV »

Offline geco

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

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #413 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.

Offline geco

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

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #415 on: 2017.February.18. 21:05:46 »
SIDBasic

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 :)
« Last Edit: 2017.February.23. 19:56:33 by geco »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #416 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?

Offline geco

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

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #418 on: 2017.February.19. 00:01:14 »
Néhány M64 fájl mazsolázgatásra :ds_icon_cheesygrin:

M64 Part1
M64 Part2
M64 Part2

Offline geco

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