Welcome, Guest. Please login or register.


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

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #240 on: 2017.January.29. 22:06:24 »
Lehet a SID max hangerejét számoltam pontatlanul, a neten talált 985248 Hz PAL CPU sebességgel számoltam: 3848,566274642947 = 65535 * 985248 Hz /16777216

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #241 on: 2017.January.29. 22:18:44 »
Lehet a SID max hangerejét számoltam pontatlanul, a neten talált 985248 Hz PAL CPU sebességgel számoltam: 3848,566274642947 = 65535 * 985248 Hz /16777216

Az szerintem jó, és 4 MHz-en pontos is a C5h, csak 8 MHz-en valamiért nem a fele lett, hanem 5Fh.

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #242 on: 2017.January.30. 08:51:13 »
Az szerintem jó, és 4 MHz-en pontos is a C5h, csak 8 MHz-en valamiért nem a fele lett, hanem 5Fh.
Lehet azért, mert nem pont duplája a frekvencia.
Megnéztem, azért :) 4MHz-en 18h+1 az osztó, és 10000Hz, 8MHz-en 0bh+1 az osztó 20833 Hz-es a lejátszás, és ahogy számoltam ehhez jó a 95.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: SID lejátszó
« Reply #243 on: 2017.January.30. 09:10:36 »
6, 7.12, 10MHz-re is számoltok? :oops: Ezt majd betöltéskor automatikusan beállítja a progi?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #244 on: 2017.January.30. 10:13:50 »
Megnéztem, azért :) 4MHz-en 18h+1 az osztó, és 10000Hz, 8MHz-en 0bh+1 az osztó 20833 Hz-es a lejátszás, és ahogy számoltam ehhez jó a 95.

Nekem 18h a DAVE frekvencia 8 MHz-en is (500000 / (24 + 1) = 20000). Talán azért, mert a DAVE órajelet is növeltem, de ez valódi gépen is így van, azaz a fix DAVE frekvencia kód a Z80/DAVE órajellel egyenes arányban növekvő frekvenciát eredményez. Lehet, hogy a számítás nem veszi figyelembe hogy nem 20833 Hz-es a lejátszás?

Az emulátor azonban jelenleg csak 1000000 maximális értéket engedélyez a hang órajelnél, tehát csak 8 MHz-ig lehet pontos az emuláció, utána már csak a Z80 gyorsulhat. :oops: A következő verzióban talán növelhetném 1250000-re (ami 10 MHz-ig elég), a lejátszó tesztelése közben bug gyanús jelenséget is észrevettem, így lehetne egy 2.0.11.2 kiadás az esetleges javítással. Egyébként elég lenne egy fix DAVE frekvencia értéket beállítani, és azt mérni, ebből hány ciklus van két video megszakítás között.
« Last Edit: 2017.January.30. 10:21:36 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #245 on: 2017.January.30. 10:18:51 »
Húú, igen, a beállítás jó, ha emulátor (nem változik a Dave freki) , akkor változik a Dave osztó, ha nem emulátor (változik a dave freki is), akkor marad a 18h, viszont ehhez nem jó az osztó, lehet átalakítom, hogy ha nem emulátorról van szó, akkor annak megfelelően számoljon.

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #246 on: 2017.January.30. 10:20:02 »
6, 7.12, 10MHz-re is számoltok? :oops: Ezt majd betöltéskor automatikusan beállítja a progi?
Kerek MHz-nként számol, és betöltéskor belövi az osztóz, mint kiderült, van kis átalalkítanivaló.
Akár lehetne 5 MHz-es is a gép.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #247 on: 2017.January.30. 11:22:55 »
Talán elég lenne a fix DAVE frekvencia beállítás is, valódi turbós gépen a DAVE mindig a Z80-al egyenes arányban gyorsul, a csak emulátoron létező konfigurációkat külön támogatni kevésbé fontos (azok is működnének, csak nem gyorsulna a lejátszás, ami nem is feltétlenül hátrány, mert például 100 MHz-es Z80-nál elvileg 250 kHz-et lehetne beállítani, de akkor már meglehetősen pontatlan lenne a frekvencia, a zajnál már csak 6 bit maradna). Ez a rutin mindenesetre a ténylegesen beállított lejátszási frekvenciából (itt 18h) számítja a szorzót:
[ Guests cannot view attachments ]

Code: ZiLOG Z80 Assembler
  1. ; NICK video interrupt frequency = 17734475 / 4 / 284 / 312
  2. ; PAL C64 clock frequency = 17734475 / 18
  3. ; fSR = playback sample rate
  4. ; N = fSR / video interrupt frequency (measured)
  5. ; fSR = N * 17734475 / 4 / 284 / 312
  6. ; SID frequency multiplier
  7. ;       = fPAL * 2 / fSR
  8. ;       = (17734475 / 18) * 2 / (N * 17734475 / 4 / 284 / 312)
  9. ;       =         (1 / 9)     / (N / 4 / 284 / 312)
  10. ;       =       4 * 284 * 312 / (9 * N)
  11. ;       =       39381.3333... / N
  12. ;       =              118144 / (3 * N)
  13.  
  14. getSIDPlaybackFreq:
  15.         di
  16.         ld    a, 0ch
  17.         out   (0bfh), a
  18.         ld    a, 18h
  19.         out   (0a2h), a
  20.         xor   a
  21.         out   (0a3h), a
  22.         ld    c, a
  23.         ld    b, a
  24.         ld    a, 65h
  25.         out   (0a7h), a
  26.         call  .l4
  27.         ld    l, b
  28.         ld    h, b
  29.         ld    b, 3
  30. .l1:    call  .l4                       ; HL = 3 * N
  31.         djnz  .l1
  32.         ld    e, l
  33.         ld    d, h
  34.         ld    a, l
  35.         ld    l, h
  36.         ld    h, b                      ; B = 0
  37.         ld    bc, 118144 >> 8           ; B = 01h
  38.         srl   l
  39.         rra
  40.         adc   a, 118144 & 0ffh
  41.         adc   hl, bc
  42. .l2:    add   a, a
  43.         adc   hl, hl
  44.         sbc   hl, de
  45.         jr    nc, .l3
  46.         add   hl, de
  47. .l3:    ccf
  48.         rl    b
  49.         jr    nc, .l2
  50.         ld    a, b
  51.         ret
  52. .l4:    in    a, (0b4h)
  53.         and   11h
  54.         or    c
  55.         rlca
  56.         and   66h
  57.         ld    c, a                      ; -ON--ON-
  58.         rlca                            ; ON--ON--
  59.         xor   c                         ; OXN-OXN-
  60.         bit   2, a
  61.         jr    z, .l5
  62.         inc   hl                        ; sound interrupt
  63. .l5:    cp    0c0h
  64.         jr    c, .l4                    ; not 50 Hz interrupt ?
  65.         ret
« Last Edit: 2017.January.30. 11:48:15 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #248 on: 2017.January.30. 11:35:05 »
Talán elég lenne a fix DAVE frekvencia beállítás is, valódi turbós gépen a DAVE mindig a Z80-al egyenes arányban gyorsul. Ez a rutin mindenesetre a ténylegesen beállított lejátszási frekvenciából (itt 18h) számítja a szorzót:
(Attachment Link)
Lehetne még előtte külön Z80 teszt is (utasítások száma két 1 kHz-es megszakítás között) ami felismeri az emulált konfigurációt is, annak a pontossága kevésbé fontos, a lényeg, hogy ne állítson be olyan frekvenciát amihez nem elég gyors a CPU. :)
Most így működik nagyjából, csak annyi a különbség, hogy Dave 50 Hz alatt számolja a Z80 utasításokat, ez alapján dől el később, hogy emulátor alatt indult a program, vagy nem.
A valódi gépes beállítás nem volt korrekt, de javítom, hogy mindig a megfelelő konfig alapján számoljon (emulátor, vagy valódi gép (esetleg emulátor + helyesen állított Dave)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #249 on: 2017.January.30. 12:00:59 »
6, 7.12, 10MHz-re is számoltok? :oops: Ezt majd betöltéskor automatikusan beállítja a progi?

A fenti (sidfreq.s-ben található) rutin a tényleges lejátszási frekvenciát méri és annak megfelelően számítja a konverzióhoz a szorzót, tehát csak ezzel is mindig jó lenne a hangmagasság, valódi gépen pedig elég egy fix DAVE frekvencia értéket (18h, ami 4 MHz-es gépen 10 kHz-nek felel meg) beállítani:

4 MHz: 197 (197.05)
6 MHz: 131 (131.37)
7.12 MHz: 111 (110.72)
8 MHz: 99, néha 98 (98.52)
10 MHz: 79 (2.0.11.2 Git verzió) (78.82)

Ahhoz, hogy az emulátor specifikus konfigurációk ahol csak a Z80 gyorsabb is kihasználják a nagyobb frekvencia lehetőségét, a Z80-at még külön mérni kell és 18h helyett alacsonyabb értéket beállítani.
« Last Edit: 2017.January.30. 14:46:01 by IstvanV »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #250 on: 2017.January.30. 13:20:57 »
A következő verzióban talán növelhetném 1250000-re (ami 10 MHz-ig elég), a lejátszó tesztelése közben bug gyanús jelenséget is észrevettem, így lehetne egy 2.0.11.2 kiadás az esetleges javítással.

A Git forráskódban már növeltem is, és az egyik hibát javítottam (a NICK portok írása a debuggerben video várakozást eredményezett, azaz lassította a Z80 kódot - ezért fagyasztotta le a lejátszót egy Lua script ami a keret színezésével jelenítette meg a CPU fogyasztást).

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #251 on: 2017.January.30. 18:40:23 »
Itt a teszt verzió, egyelőre még nem foglalkoztam a zene átalakítással, úgyhogy csak az egy teszt alanyom van.

Ezzel a verzióval nekem a fűrészjelből (20h hullámforma) háromszög lesz. :oops: De ezt a konvertáló programban is lehetne javítani.

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #252 on: 2017.January.30. 23:08:08 »
Ezzel a verzióval nekem a fűrészjelből (20h hullámforma) háromszög lesz. :oops: De ezt a konvertáló programban is lehetne javítani.
Áááá, én szúrtam el, a táblák sorrendjét a kiválasztásnál jól lőttem be, de feltöltésnél felcseréltem a fűrészjelet a háromszöggel, elméletileg javítva, és az osztó számítás is valódi gépen, pár kisebb módosítás mellett betettem az ext DAC lejátszást is, 1-es gomb DAVE, 2-es ext DAC, menet közben váltható, annyi, hogy ilyenkor a váltás idejére elhallgat a zene.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: SID lejátszó
« Reply #253 on: 2017.January.31. 00:02:02 »
az osztó számítás is valódi gépen

Most BFh lett 4 MHz-es konfiguráción, de még nem néztem, hogy van-e valahol hiba.

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: SID lejátszó
« Reply #254 on: 2017.January.31. 08:58:31 »
Most BFh lett 4 MHz-es konfiguráción, de még nem néztem, hogy van-e valahol hiba.
Nekem 0c5h-t dobál.

 
  0155  54                LD    D, H
  0156  3E C5          LD    A, C5
  0158  01 00 08     LD    BC, 0800