Welcome, Guest. Please login or register.


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

Offline IstvanV

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

A Green Beret, Katakis, Navy Seals és Platoon esetében már sikerült javulást elérni.
« Last Edit: 2017.February.13. 15:34:40 by IstvanV »

Offline geco

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

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #377 on: 2017.February.12. 12:45:38 »
[ Guests cannot view attachments ]

- 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)
« Last Edit: 2017.February.12. 14:48:15 by IstvanV »

Offline geco

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

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #379 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
« Last Edit: 2017.February.12. 20:04:49 by geco »

Offline geco

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

Offline IstvanV

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

Offline geco

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

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: SID lejátszó
« Reply #383 on: 2017.February.13. 08:56:35 »
Ha kész van az egész, akkor írtok egy "user manual"-t? :oops:

Offline geco

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

Offline Zozosoft

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

Offline geco

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

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #387 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    (szerk.: burkológörbe emuláció javítva a sid_conv.cpp-ben)

A forráskódból is egyszerűen fordítható ezzel a fordítóval (vagy ezzel 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 programmal és a sidrecn.lua 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 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%


[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]

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%
« Last Edit: 2017.February.15. 13:10:04 by IstvanV »

Offline geco

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

Offline IstvanV

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

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.
« Last Edit: 2017.February.15. 13:08:30 by IstvanV »