Welcome, Guest. Please login or register.


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

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #210 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.
« Last Edit: 2017.January.28. 14:49:27 by geco »

Offline IstvanV

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

Offline geco

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

Offline IstvanV

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

Offline geco

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

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #215 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).
« Last Edit: 2017.January.28. 19:29:09 by IstvanV »

Offline geco

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

Offline gflorez

  • EP addict
  • *
  • Posts: 3607
  • Country: es
    • Támogató Támogató
Re: SID lejátszó
« Reply #217 on: 2017.January.28. 20:32:31 »
Wonderful!

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #218 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.
« Last Edit: 2017.January.29. 15:21:55 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #219 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
« Last Edit: 2017.January.29. 20:26:55 by geco »

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 #220 on: 2017.January.29. 19:56:04 »
ezek a snapshotok megint nem működnek nekem....
Vigyázat! Szektás vagyok! :)

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #221 on: 2017.January.29. 19:58:22 »
Szerintem más a verziód, mint az enyém: version 2.0.11 beta

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #222 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.
« Last Edit: 2017.January.29. 20:15:44 by IstvanV »

Offline IstvanV

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

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #224 on: 2017.January.29. 20:13:20 »
Egy ideje már van nem beta 2.0.11. :oops:
Le is töltöttem , csak még nem jutottam el odáig, hogy fel is tegyem, de ma fel is teszem.