Welcome, Guest. Please login or register.


Author Topic: DAVE (Read 44107 times)

Offline tigrian

  • EP user
  • *
  • Posts: 401
  • Country: hu
    • View Profile
DAVE
« on: 2005.December.23. 00:19:55 »
Itt meg a hangkeltéssel kapcsolatos téma. Errõl is lehet esetleg összefoglaló.
re' mi' do' do sol

Online Zozosoft

  • EP addict
  • *
  • Posts: 13379
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #1 on: 2006.January.03. 10:43:32 »

Offline gafz

  • EP lover
  • *
  • Posts: 703
  • Country: hu
    • View Profile
    • http://gafz.atw.hu
Re: DAVE
« Reply #2 on: 2006.January.04. 20:52:57 »
Quote from: "tigrian"
Az egyik ez a NICK doku, a másik pedig a DAVE issue4 -es változata (az EXOS-ban issue5 van. Még nem néztem meg, mi a különbség.)


Öööö.... izé... nem akarok pofátlan lenni meg a taszt-(és AIO)projejt-tõl elvonni, de esetleg a Dave docut. is közkinccsé tennéd valamikor?
Enterprise Forever

Offline tigrian

  • EP user
  • *
  • Posts: 401
  • Country: hu
    • View Profile
Re: DAVE
« Reply #3 on: 2006.January.04. 21:22:24 »
Quote from: "gafz"
Öööö.... izé... nem akarok pofátlan lenni meg a taszt-(és AIO)projejt-tõl elvonni, de esetleg a Dave docut. is közkinccsé tennéd valamikor?

Semeddig nem tart, csak azért nem ajánlgatom, mert ugyanez megvan HTML-ben az angol EXOS dokuban.
De tessék, íme: (domain, port már ismerõs)//ep/dave/dave.zip
re' mi' do' do sol

Offline gafz

  • EP lover
  • *
  • Posts: 703
  • Country: hu
    • View Profile
    • http://gafz.atw.hu
Re: DAVE
« Reply #4 on: 2006.January.04. 21:44:45 »
Quote from: "tigrian"
Semeddig nem tart, csak azért nem ajánlgatom, mert ugyanez megvan HTML-ben az angol EXOS dokuban.
De tessék, íme: (domain, port már ismerõs)//ep/dave/dave.zip


Leszedtem, felraktam, köszönöm! (még jó, hogy megvolt a kukában az a levél... :D)
Enterprise Forever

Online Zozosoft

  • EP addict
  • *
  • Posts: 13379
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #5 on: 2006.June.01. 23:35:51 »
Quote from: "tigrian"
Itt meg a hangkeltéssel kapcsolatos téma. Errõl is lehet esetleg összefoglaló.

Mikorra várható az a összefoglaló? :)
Lassan jól jönne CPC ügy kapcsán :) elöször is ki kell majd találni, hogy ott mit csinál a program a hangchippel (jöhet egy AY magyarázat is :) ), aztán ki kell találni, hogyan lehet hasonlót kihozni a DAVE-bõl. És ehhez nem ártana ismerni a DAVE lehetõségeit :) mostani tudományom kimerül a ZX Spectrum 1 bites hangjának utánzásában... :(

Offline tigrian

  • EP user
  • *
  • Posts: 401
  • Country: hu
    • View Profile
Re: DAVE
« Reply #6 on: 2006.June.02. 01:06:55 »
Quote from: "Zozosoft"
Mikorra várható az a összefoglaló? :)

Hú, most erre nemigen jut idõm...
re' mi' do' do sol

Offline geco

  • EP addict
  • *
  • Posts: 5347
  • Country: hu
    • View Profile
Re: DAVE
« Reply #7 on: 2006.June.02. 18:58:59 »
Nem tudom, hogy ez segít-e, én ezt használtam az Exolonnál. A zajcsatornát figyelmen kívül hagyja.

Online Zozosoft

  • EP addict
  • *
  • Posts: 13379
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #8 on: 2006.June.02. 19:45:13 »
Quote from: "geco"
Nem tudom, hogy ez segít-e, én ezt használtam az Exolonnál. A zajcsatornát figyelmen kívül hagyja.

És ezt mi helyére raktad? ROM rutin hívás? Vagy közvetlen portbizgatás?

Offline geco

  • EP addict
  • *
  • Posts: 5347
  • Country: hu
    • View Profile
Re: DAVE
« Reply #9 on: 2006.June.02. 20:49:44 »
Quote from: "Zozosoft"
És ezt mi helyére raktad? ROM rutin hívás? Vagy közvetlen portbizgatás?


Közvetlen portbizgatás helyére, de a CPC ROM-ban is hasonlóan birizgálja a portokat, mint a direkt portos zenéjû programok, csak minden hozzá tartozó kódot is ki kellene szedni hozzá. :)
A csillagos betöltõhöz jó lesz, gondolom, nálad is a XOR feliratos betöltõ jelentkezett ( Temps infini és egyéb kellemes felirattal)  :), a PoP elõtt is ilyen van, abban a verzióban nem unpackol?

Online Zozosoft

  • EP addict
  • *
  • Posts: 13379
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #10 on: 2006.June.02. 22:33:16 »
Quote from: "geco"
A csillagos betöltõhöz jó lesz

Ez bejött, bár marhára nem értem mit csinál :-)
Igaz kilépéskor még tutulva marad, de erre majd kitalálok valamit :-)

Ezt mibõl szedted ki? A Spectrum átírat EXOLON-ból?

(A betöltõ képek önkicsomagolós fájlokban vannak, erre gondolsz unpackolás alatt?)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux 64 bit (Suse) Linux 64 bit (Suse)
  • Browser:
  • Firefox 3.5.4 Firefox 3.5.4
    • View Profile
Re: DAVE
« Reply #11 on: 2010.May.19. 13:57:29 »
Jó lenne ilyeneket összeszedni! Van is erre a hw rovat mélyén elsüllyedve Nick és Dave topikunk, amit régen nem látott Tigrian barátunk indított.

Néhány kiegészítés a DAVE dokumentációjához; ez még mindig nem teljes, és nem biztos, hogy mind pontos, de talán van ezek között olyan információ, amit még nem tud mindenki:

A0h-A5h port:

A hanggenerátorok működése: egy 12 bites számláló a megadott frekvencia értéktől visszafelé számol 250 kHz sebességgel (ez 4 MHz-es gépre értendő, ha a BFh port 1. bitje nincs beállítva). Amikor túlcsordul (azaz 0 után -1 következne), akkor -1 helyett a regiszterekben megadott 12 bites érték kerül újra a számlálóba, és a következők egyike történik a polinom számláló torzítástól függően:

  - ha nincs torzítás, akkor a négyszöggenerátor (flip-flop) kimenete egyszerűen átbillen
  - ha van torzítás, akkor a kimenetre a választott polinom számláló (álvéletlenszám generátor) aktuális kimenete kerül; a polinom számlálók folyamatosan futnak 250 kHz órajellel, ami egyben például azt is jelenti, hogy ha a beállított frekvencia a polinom számláló hosszának az egész számú többszöröse (pl. 4 bites számlálónál 15-1, 30-1, 45-1, stb.), akkor nincs hang, mert a mintavételezésnél mindig ugyanaz az érték van

A felüláteresztő szűrő azt jelenti, hogy az órajelnek használt csatorna kimenetének (amely tartalmazza az esetleges torzítást, szűrőt, és gyűrűmodulációt is) minden lefutó élére a flip-flop kimenete 0-ra állítódik. Ezért ha az órajel csatorna frekvenciája nagyobb, mint a szűrt csatornáé, akkor egyben a frekvencia kétszereződik:
     _____     _____     _____     _____     _____
|____|    |____|    |____|    |____|    |____|    |   1. csatorna
       ________        ________        ________
_______|       |_______|       |_______|       |___   0. csatorna szűrés nélkül
       ___     _____   _______ ________        ___
|______|  |____|    |__|      ||       |_______|  |   0. csatorna szűréssel


A gyűrűmoduláció a felüláteresztű szűrő (ha az engedélyezett) után történik, és XNOR műveletet végez a másik csatorna (esetleg már torzított, szűrt, gyűrűmodulált) kimenetével:
     _____     _____     _____     _____     _____
|____|    |____|    |____|    |____|    |____|    |   0. csatorna
       ________        ________        ________
_______|       |_______|       |_______|       |___   2. csatorna
_____  ___          ___  _____ ____    _     __   _
     |_|  |_________|  |_|    ||   |___||____| |__|   gyűrűmoduláció eredménye


Érdekesség, hogy igazi gépen a hanggenerátorok nem működnek a legnagyobb (0) frekvenciával, tehát nem lehet 125 kHz-es négyszögjelet előállítani. A számláló talán fut ilyenkor is (pl. megszakítás céljára, de ilyen gyors megszakításnak nem sok értelme van), és lehet, hogy polinom számlálót választva van hang, de ezt ellenőrizni kellene valódi gépen.

A6h port:

A zajcsatornához használt polinom számláló az órajel csatorna (esetleg már torzított, szűrt, gyűrűmodulált) kimenetének lefutó élére frissítődik, és nem fix 250 kHz-es sebességgel, mint a hangcsatornáknál. A 31.25 kHz-es mód megfelel egy 4-1 frekvenciájú órajel csatorna használatának.

A 4. bit (7 és 17 bites számláló felcserélése) beállítása azt jelenti, hogy a választható hosszúságú (9/11/15/17 bites) számlálót használhatják a hangcsatornák a 7 bites helyett (és ilyenkor ennek is 250 kHz-es órajele lesz), illetve a zajcsatorna polinom számlálója lesz a 7 bites (250 kHz helyett a választható órajellel).

A zajcsatornánál az effektusok sorrendje (ha engedélyezettek):
  - 1. aluláteresztő szűrő: csak a 2. csatorna (torzított, szűrt, stb.) kimenetének a lefutó éleire mintavételeződik a polinom számláló kimenete (de egyébként az ilyenkor is fut a beállított frekvencián), az órajel lefutó élei helyett
  - 2. felüláteresztő szűrő: hasonló a hangcsatornákhoz: a 0. csatorna lefutó éleire 0-ra állítódik a tároló kimenete a polinom számláló következő mintavételezéséig
  - 3. gyűrűmoduláció: a hangcsatornákhoz hasonlóan XNOR műveletet végez az 1. csatornával

Polinom számlálók

A DAVE 4 polinom számlálót tartalmaz:
  - egy 4 bites, amely mindig 250 kHz órajellel fut, és csak a hangcsatornák használhatják
  - egy 5 bites, amely mindig 250 kHz órajellel fut, és csak a hangcsatornák használhatják
  - egy 7 bites, amely vagy 250 kHz-es órajellel működik és a hangcsatornák használhatják (A6h port bit 4 = 0), vagy az A6h porton beállított órajellel a zajcsatorna bemenete (A6h port bit 4 = 1)
  - egy választható hosszúságú 9/11/15/17 bites, amely vagy az A6h porton beállított órajellel a zajcsatorna bemenete (A6h port bit 4 = 0), vagy 250 kHz-es órajellel működik és a hangcsatornák használhatják (A6h port bit 4 = 1)

A számlálók működése, amikor a kimenetük frissítődik:
  - a számláló értéke egy bittel balra léptetődik
  - az új 0. bit két (az adott számlálóhoz választott) bit léptetés előtti értéke között végzett XOR művelet eredménye
  - a kimenet az új 0. bit lesz
A bitek, amelyek között XOR művelet történik, azaz a bináris "polinom":
  - 4 bites számlálónál a 3. és 2. bit
  - 5 bites számlálónál a 4. és 2. bit
  - 7 bites számlálónál a 6. és 5. bit
  - 9 bites számlálónál a 8. és 4. bit
  - 11 bites számlálónál a 10. és 8. bit
  - 15 bites számlálónál a 14. és 13. bit
  - 17 bites számlálónál a 16. és 13. bit
Az álvéletlenszám sorozat hossza 2^N-1 (tehát 5 bites számlálónál pl. 31), ugyanis a számláló értéke nem lehet 0, mert akkor végtelen ciklusban csak 0 lehetne a kimenet (0 XOR 0 = 0). A kezdőérték bekapcsoláskor talán minden bit = 1, de ezt nem lehet biztosan tudni, és jelentősége sem sok van.

A7h port:

b0-b2: itt a "szinkronizálás" bekapcsolása azt jelenti, hogy:
  - az adott hangcsatorna számlálója nem fut
  - a számlálót folyamatosan az A0h-A5h regiszterekben beállított frekvencia értéken tartja
  - a négyszöggenerátor flip-flop kimenetét 0-ra állítja

b3-b4: a D/A mód bekapcsolásakor a kimeneten az A8h vagy ACh porton beállított hangerő négyszerese van (azaz a hatása olyan, mintha mind a négy csatorna kimenete folyamatosan 1 lenne, és a hangerejük megegyezne a 0. csatornával)

b5-b6: itt a megszakítást nem a hanggenerátorok torzított, szűrt, stb. kimenete vezérli, hanem az adott hanggenerátor számlálója közvetlenül, amelynek minden 0-ra való lefutása után a B4h port 0. bitje átbillen, és (ha engedélyezett) beállítódik az 1. bit. Az 1 kHz-es megszakítás megfelel 250-1 hanggenerátor frekvenciának, az 50 Hz-es pedig 5000-1-nek, azaz ez nem a video megszakítás sebessége, hanem pontosan 80000 Z80 ciklus (vagy 120000, ha a BFh port 1. bitje be van állítva).

B4h port:

  - bit 0-1: 50 Hz/1 kHz/hanggenerátor megszakítás
  - bit 2-3: 1 Hz megszakítás
  - bit 4-5: video megszakítás
  - bit 6-7: INT2 megszakítás (nem használt ?)

  - a 0., 2., 4., és 6. bit mindig olvasható, akkor is, ha az adott megszakítás le van tiltva; ezekbe a bitekbe '1'-et írva engedélyezhető, '0'-t írva tiltható a megszakítás
  - az 1., 3., 5., és 7. bit csak akkor működik, ha engedélyezett a megfelelő megszakítás, egyébként mindig 0.; ha engedélyezett a megszakítás, akkor az 1. és 3. bit a 0. és 2. bit minden (fel- és lefutó) élére beállítódik, az 5. és 7. bit pedig csak a 4. és 6. bit lefutó éleire
  - a Z80-hoz a megszakítás kérés az 1., 3., 5., és 7. bit között végzett OR művelet eredménye; ezeket a biteket vagy '1' bit visszaírásával, vagy az adott megszakítás letiltásával lehet törölni. Egyébként amíg nem törlődik mind a 4 bit, a Z80 folyamatosan megszakítást generál
  - a 4. bit a NICK-től érkezik, és az adott sorban az aktuális LPB-ből olvasott VINT bit másolata; ezt szerintem a NICK minden sor elején újraolvassa az LPB-ből (de talán jobb lenne ellenőrizni igazi gépen)

                 _____________
_________________|            |_____________________________    VINT
                 _____________
_________________|            |_____________________________    B4h:b4 olvasás
                                               _
...............................................||...........    B4h:b5 írás
                              _________________
______________________________|                |____________    B4h:b5 olvasás


Ebből az is látható, hogy a video megszakítás csak a megszakításkérést tartalmazó LPB utáni első, már VINT bit nélküli sor elején történik. Ugyanez az oka annak, hogy nem lehet két egymást követő sorban video megszakítás.

B5h port:

Írás:
  - bit 0-3: billentyűzetmátrix sor kiválasztása (csak a 0.-9. sorban van billentyű)
  - bit 4: nem használt ? (vagy SERIAL, NET, stb. használja, amit nem ismerek)
  - bit 5: magnóhang kikapcsolása (ha a bit 1, akkor nincs magnóhang)
  - bit 6: REM1 bekapcsolása (ha a bit 1, akkor REM1 be van kapcsolva)
  - bit 7: REM2 bekapcsolása (ha a bit 1, akkor REM2 be van kapcsolva)

Olvasás:
  - bit 0-7: a billentyűzetmátrix választott sorának aktuális állapota; ha egy billentyű le van nyomva, akkor a megfeleleő bit '0', egyébként '1'.

    \ bit+-------+-------+-------+-------+-------+-------+-------+-------+
     \   |     0 |     1 |     2 |     3 |     4 |     5 |     6 |     7 |
   sor\  |       |       |       |       |       |       |       |       |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    0 |     N |     \ |     B |     C |     V |     X |     Z | SHF_L |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    1 |     H |  LOCK |     G |     D |     F |     S |     A |  CTRL |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    2 |     U |     Q |     Y |     R |     T |     E |     W |   TAB |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    3 |     7 |     1 |     6 |     4 |     5 |     3 |     2 |   ESC |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    4 |    F4 |    F8 |    F3 |    F6 |    F5 |    F7 |    F2 |    F1 |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    5 |     8 |       |     9 |     - |     0 |     ^ | ERASE |       |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    6 |     J |       |     K |     ; |     L |     : |     ] |       |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    7 |  STOP |    LE |  JOBB |   FEL | PAUSE |   BAL | ENTER |   ALT |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    8 |     M |   DEL |     , |     / |     . | SHF_R | SPACE |   INS |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+
  |    9 |     I |       |     O |     @ |     P |     [ |       |       |
  +------+-------+-------+-------+-------+-------+-------+-------+-------+


B6h port:

Olvasás:
  - bit 0: a billentyűzetmátrix sorával együtt választható joystick irány állapota ('0': aktív, '1': nem aktív)

    \ bit+---------+
     \   |       0 |
   sor\  |         |
  +------+---------+
  |    0 | J1 TŰZ  |
  +------+---------+
  |    1 | J1 FEL  |
  +------+---------+
  |    2 | J1 LE   |
  +------+---------+
  |    3 | J1 BAL  |
  +------+---------+
  |    4 | J1 JOBB |
  +------+---------+
  |    5 | J2 TŰZ  |
  +------+---------+
  |    6 | J2 FEL  |
  +------+---------+
  |    7 | J2 LE   |
  +------+---------+
  |    8 | J2 BAL  |
  +------+---------+
  |    9 | J2 JOBB |
  +------+---------+


  - bit 1-3: nem használt/ismeretlen/mindig 1 (?)
  - bit 4-5: nem használt/ismeretlen/mindig 0 (?)
  - bit 6: magnó bemenet szint (ha nincs bemenet, akkor '1'; '0' = magas szint, '1' = alacsony szint ?)
  - bit 7: magnó adatbemenet (ha nincs bemenet, akkor '1')

BFh port:

Írás:
  - bit 0: beépített RAM mérete ('0': 64K, '1': 16K); ennek a hatását nem ismerem, meg kellene nézni igazi gépen. Mindenesetre normál esetben mindig '0'-t kell írni.
  - bit 1: frekvencia osztó: ha nincs beállítva, akkor a fent említett "250 kHz" frekvencia a Z80 órajelének a 16-od része, egyébként 24-el kell osztani. Tehát ha ez be van állítva, akkor minden DAVE frekvencia (számlálók, hanggenerátorok, 1 Hz/50 Hz/1 kHz megszakítás) másfélszer alacsonyabb lesz, turbós gépen pedig minden frekvenciát a Z80 megváltozott órajelével arányosan szorozni kell.
  - bit 3: 1: memória várakozás letiltása (video memóriánál nincs hatása)
  - bit 2: memória várakozás mód (csak akkor, ha nincs a 3. bittel letiltva, és nem video memóriához történik hozzáférés):
      - ha 0, akkor várakozás minden memóriaműveletnél
      - ha 1, akkor várakozás csak M1 olvasásnál - ez az alapértelmezett mód. Az M1 olvasás a Z80 utasítások első byte-ját jelenti; DDh, EDh, és FDh prefixnél a prefix utáni utasításbyte is M1 olvasásnak számít, CBh prefixnél pedig a következő utasításbyte csak akkor M1 olvasás, ha nem volt a CBh előtt DDh vagy FDh prefix is:
          - NN
          - CBh NN
          - DDh NN
          - EDh NN
          - FDh NN
          - DDh CBh
          - FDh CBh
        az M1 olvasásoknál történik egyébként az R regiszter frissítése is
      A várakozás normál 4 MHz-es gépen 1 Z80 ciklus, turbós (6 vagy 7.119 MHz) gépen pedig 2 Z80 ciklus. Az 1. bitnek nincs hatása a várakozás mértékére. Video RAM-nál az itt beállítható várakozásoknak nincs hatása, ott ugyanis 889846 Hz-es frekvenciához kell szinkronizálni a hozzáféréseket. Ezt 4 MHz-es gépen egyszerűen úgy lehet - nem túl pontosan - közelíteni, hogy a két video RAM vagy video I/O port (ugyanis a NICK 80h-8Fh portjainál is van ilyen várakozás) között eltelt Z80 ciklusok számához hozzá kell adni 1.5-öt, majd ha az eredmény nem osztható 4.5-el, akkor felfelé kerekíteni, hogy osztható legyen. A várakozás ennek és az eredeti (1.5 hozzáadása előtti) ciklusszámnak a különbsége 0.5 Z80 ciklus egységekben. Lényeges azonban, hogy a memóriaműveletek az utasításon belül pontosan mikor történnek:
        - M1 olvasás: teljes időtartam 4 ciklus, az olvasás időpontja ezen belül 2.0 ciklus
        - normál memória olvasás és írás: teljes időtartam 3 ciklus, a memóriaművelet időpontja 2.5 ciklus
        - I/O port olvasás és írás: 4 ciklus, ezen belül 3.5 ciklusnál történik a tényleges I/O művelet
« Last Edit: 2010.May.19. 14:01:56 by IstvanV »

Online Zozosoft

  • EP addict
  • *
  • Posts: 13379
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.6.3 Firefox 3.6.3
    • View Profile
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #12 on: 2010.May.19. 14:14:45 »
Néhány kiegészítés a DAVE dokumentációjához; ez még mindig nem teljes, és nem biztos, hogy mind pontos, de talán van ezek között olyan információ, amit még nem tud mindenki:
Szuper, köszönjük!
Nekem fõleg ezek a polinomos-gyûrûs-szûrõs izék voltak mindig homályosak  :oops: azt már kezdem érteni mit csinál, már csak azt nem tudom hogy lesz ebbõl zene :)

Online Zozosoft

  • EP addict
  • *
  • Posts: 13379
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.6.3 Firefox 3.6.3
    • View Profile
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #13 on: 2010.May.19. 14:18:10 »
  - bit 0: beépített RAM mérete ('0': 64K, '1': 16K); ennek a hatását nem ismerem, meg kellene nézni igazi gépen. Mindenesetre normál esetben mindig '0'-t kell írni.
Tippem az, hogy akkor csak FF szegmens fog videó memóriaként dekódolódni. Majd égetek egy próba EXOS epromot, és megnézzük mi lesz :-)

Online Zozosoft

  • EP addict
  • *
  • Posts: 13379
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 3.6.3 Firefox 3.6.3
    • View Profile
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #14 on: 2010.May.19. 14:25:41 »
  - bit 6-7: INT2 megszakítás (nem használt ?)
Az a SERIAL/NET csatlakozó "Status In" bemenetérõl érkezik.