Welcome, Guest. Please login or register.


Author Topic: DAVE (Read 81376 times)

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: DAVE
« Reply #120 on: 2015.September.22. 22:25:55 »
nem nick, hanem dave, és nem is bug, hanem feature :)
szóval: tök feleslegesen raktak D/A átalakítót a chipbe, hiszen ha egy csatorna hangmagasságát a nem hallható tartományba rakjuk, akkor a hangerő állításával kb ugyanazt a minőséget érhetjük el digi lejátszásra, ráadásul sokkal több csatornán...
Vigyázat! Szektás vagyok! :)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: DAVE
« Reply #121 on: 2015.September.22. 23:13:15 »
nem nick, hanem dave, és nem is bug, hanem feature :)
szóval: tök feleslegesen raktak D/A átalakítót a chipbe, hiszen ha egy csatorna hangmagasságát a nem hallható tartományba rakjuk, akkor a hangerő állításával kb ugyanazt a minőséget érhetjük el digi lejátszásra, ráadásul sokkal több csatornán...

Szerintem nincs is D/A atalakito a Dave-ben, ha Dave csati normal hangot (oszcillator) szolaltsz meg, ha "digi" van (tok mindegy!), az ugyanugy "digitalisan" jelenik meg a Dave labain. Semmi kulonbseg. A D/A "atalakitast" a Dave-re aggatott "ellenallas letra" rendszeru D/A atalakito vegzi :) Ebbol a szempontbol hasonlit a Nick-re, ott is digitalisan jon ki a pixel "szine" amit kivul alakitanak aztan digitalis jelle. Ez azert erdekes, mert lathato modon a Dave/Nick inkabb tisztan digitalis cucc szerintem. C64-en pl a SID/VIC is foglalkozik nem digitalis "rendszeru" jel eloallitasaval ...

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: DAVE
« Reply #122 on: 2015.September.22. 23:44:22 »
Szerintem nincs is D/A atalakito a Dave-ben, ha Dave csati normal hangot (oszcillator) szolaltsz meg, ha "digi" van (tok mindegy!), az ugyanugy "digitalisan" jelenik meg a Dave labain. Semmi kulonbseg. A D/A "atalakitast" a Dave-re aggatott "ellenallas letra" rendszeru D/A atalakito vegzi :) Ebbol a szempontbol hasonlit a Nick-re, ott is digitalisan jon ki a pixel "szine" amit kivul alakitanak aztan digitalis jelle. Ez azert erdekes, mert lathato modon a Dave/Nick inkabb tisztan digitalis cucc szerintem. C64-en pl a SID/VIC is foglalkozik nem digitalis "rendszeru" jel eloallitasaval ...

akkor csak az a pár port beállítási lehetőség felesleges
Vigyázat! Szektás vagyok! :)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: DAVE
« Reply #123 on: 2015.September.23. 00:20:19 »
akkor csak az a pár port beállítási lehetőség felesleges

Az lehet, amde szinte semmi extra nem kell hozza, lehet, egyetlen egy kapunyi vagy hasonlo addon a Dave belsejeben :) Viszont elonye tobb is lehet (bar csak tippelek, ennyire azert nem ertek hozza): pl hiaba magas a freki, lehet vmi interferancia pattern ami kialakul, ha a digi hangod kiadott frekvenciaja es a "nagyon magas" oszcillator frekvencia egymas tobbszorosei, nem tudom, vagy esetleg nagyobb a zavaro jel a tobbi aramkorre nezve is, ha meg Dave is nyomatja. Ami viszont erdekesebb (bar ezt meg kevesbe tudom): lehet, hogy a "D/A mod" beallitasa csak annyi, hogy fix szintet ad, es kozben az osszcillator szabadon dolgozhat barmilyen frekvencian (anelkul, hogy hatasa lenne a "digi lejatszasra"). Ennek pl (ismet: csak tippelek) lehet olyan ertelme, hogy a meg mindig lehet talan TG interrupt-ot eloallitani vele, vagy pl modulalni egy masik csatornat, stb. Talan :) Ez utobbi onnan jutott az eszembe, hogy Dave-ben tobb midenre is hasznalhato egy csatorna, ahol fontos a frekvenciaja, annak ellenere, hogy nem hallod peldaul, ilyen cel lehet a TG interrupt, mas csatornara configolt beallitott hatasa, stb. Majd valaki okosabb kijavit :)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: DAVE
« Reply #124 on: 2016.March.02. 11:15:27 »
Valaki esetleg Dave ugyben tudna valaszolni a kovetkezore? Mi tortenik, ha az ember irja a tone generator-ok counter-jeit. Az azonnal betoltodik, amirol vissza kezd szamolni ugye, vagy az elozo megy tovabb, es csak akkor tolti be az ujat, ha alulcsordul a szamlalo? Illetve, ha azonnal, akkor mi tortenik, ha elobb a 12 bites counter also byte-jat irom, aztan a felso 4 bitet, akkor ketszer toltodik be, eloszor ugy, hogy a "fele van csak update-elve", aztan mar az egesz?

Nem tudtam szepen leirni mi a bajom. de konkret oka van, hogy ezt kerdezem: Xep128-ba irnek eppen nemi TG interrupt emulaciot. Ezert irtam egy teszt programot. Hibahataron belul azt irja ki mint az ep128emu-nal (marmint a Xep128, de csak a meg nem publikus verzio), _kiveve_ ha a TG interrupt forrasa valamelyik TG csati. Mivel a teszt programban akkor irom be a counter-ek erteket is, elek a gyanuperrel, hogy a problema az, hogy ep128emu szerint a TG counterek erteke azonnal betolti a visszaszamlalosdit is, mig Xep128-nal nem, igy persze a ketto eredmenye eltero lesz viselkedesileg (es nem, a "sync" bit nincs hasznalva).

Lasd kepek a kulonbsegrol, van kis kulonbseg mashol is, de elenyeszo, a ket hex ertek amugy Dave 8/12MHz beallitasra nezve meri egy ciklusban hogy mennyiszer fut le az, amig valt erteket az adott "level" bit a B4 porton.

Illetve mellekeltem a programoskat is, ha valaki esetleg igazi EP-n le tudja futtatni, hogy mit hoz ki ...

Koszi szepen!

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: DAVE
« Reply #125 on: 2016.March.02. 11:48:56 »
Valaki esetleg Dave ugyben tudna valaszolni a kovetkezore? Mi tortenik, ha az ember irja a tone generator-ok counter-jeit. Az azonnal betoltodik, amirol vissza kezd szamolni ugye, vagy az elozo megy tovabb, es csak akkor tolti be az ujat, ha alulcsordul a szamlalo?

Az ep128emu-ban csak akkor töltődik be, amikor alulcsordul a számláló. Egyébként a frekvencia regiszterek folyamatos írásakor nem tudna futni a számláló, ezt valódi gépen egyszerűen lehetne tesztelni. De a "sync" bit beállítása és törlése mindig újratölti a számlálót, és a négyszögjel generátor kimenetét (a hangot, nem a B4h porton olvasható értéket) 0-ra állítja.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: DAVE
« Reply #126 on: 2016.March.02. 12:09:39 »
Koszi a valaszt. Haaat, csak akkor azt tudnam, mi okozza a screenshot-okon is demozott kulonbseget ... Mondjuk egy dolog meg, hogy nalam kulon fut minden szamlalo, az 1KHz-es is, akkor is, ha nincs hasznalva mint TG interrupt source stb. Es attol fuggoen, hogy mi van kivalasztva forrasnak a "TG interrupthoz" nezem az amugy "maguktol" is futo szamlalokat. Lehet, ebben elter az ep128emu-tol es esetleg egy valodi gep viselkedesetol is?

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #127 on: 2016.March.02. 12:21:11 »
Megnézem valódi gépen. Turbós érték is kérdés?
191-es port számít, vagy azt állítja magának a program?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: DAVE
« Reply #128 on: 2016.March.02. 12:22:36 »
Koszi a valaszt. Haaat, csak akkor azt tudnam, mi okozza a screenshot-okon is demozott kulonbseget ... Mondjuk egy dolog meg, hogy nalam kulon fut minden szamlalo, az 1KHz-es is, akkor is, ha nincs hasznalva mint TG interrupt source stb.

Az ep128emu-ban is mindig futnak, mivel az állapotuk mindig olvasható a B4h porton.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: DAVE
« Reply #129 on: 2016.March.02. 12:43:32 »
Megnézem valódi gépen. Turbós érték is kérdés?
191-es port számít, vagy azt állítja magának a program?

Turbos ertek nem igazan, alap 4MHz, bar ha mar megnezed, jo lenne, akkor majd azt is osszehasonlitom kesobb :)

191-es port erteke nem szamit, allitja a program, amikor a Dave 8/12MHz osztot allitja, azzal egyutt beallitja az egesz portot.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: DAVE
« Reply #130 on: 2016.March.02. 12:52:42 »
Az ep128emu-ban is mindig futnak, mivel az állapotuk mindig olvasható a B4h porton.

Valoban, de en ugy ertettem, hogy a TG interrupt forrasa kapcsolhato, 50Hz / 1Khz / tg0 freq / tg1 freq kozott. A B4 porton nyilvan csak a kivalasztott forras allapota olvashato, Xep128-ban viszont akkor is fut folyamatosan az 50Hz / 1Khz counter is, ha a TG interrupt forrasa pl a tg0 oszc., es nem az 50Hz vagy 1Khz counter. Ha atallitom a forrasat a TG interrupt-nak, akkor csak annyi tortenik hogy melyik szamlalot nezze, de annak erteke pl nem reset-elodik, mert mindegyik fut amugy is. Azert irom csak ezt le, mert tovabbra sem vilagos, mi okozza a kulonbseget az ep128emu es a Xep128 kozott amit a screenshot-okkal demonstraltam.

Amugy a tesztprogramom igy mukodik: interrupt letiltva, megvarja amig 0xB4 porton az adott szint (nem a latch) erteket valt, utana indul a varakozas es szamlalo noveles, amig megint erteket nem valt a kivalasztott bit. Plusz ehhez van meg, hogy a kulonbozo TG interrupt forrasok elott beallitja, hogy mi legyen a TG interrupt rate forrasa az 50hz / 1khz / tg0 /tg1 kozul.
« Last Edit: 2016.March.02. 13:04:59 by lgb »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: DAVE
« Reply #131 on: 2016.March.02. 13:14:34 »
Valoban, de en ugy ertettem, hogy a TG interrupt forrasa kapcsolhato, 50Hz / 1Khz / tg0 freq / tg1 freq kozott. A B4 porton nyilvan csak a kivalasztott forras allapota olvashato, Xep128-ban viszont akkor is fut folyamatosan az 50Hz / 1Khz counter is, ha a TG interrupt forrasa pl a tg0 oszc., es nem az 50Hz vagy 1Khz counter.

Mindegyik fut mindig (TG csak akkor, ha nincs sync bit):
Code: C++
  1.     // update polynomial counters
  2.     if (--polycnt4_phase < 0)                   // 4-bit
  3.       polycnt4_phase = 14;
  4.     if (--polycnt5_phase < 0)                   // 5-bit
  5.       polycnt5_phase = 30;
  6.     if (!noise_polycnt_is_7bit) {
  7.       // channel 3 uses the variable length polynomial counter
  8.       if (--polycnt7_phase < 0)                 // 7-bit
  9.         polycnt7_phase = 126;
  10.       // channel 3 polynomial counter: updated on negative edge
  11.       if (*chn3_clk_source < chn3_clk_source_prv) {
  12.         if (--polycntVL_phase < 0)              // variable length
  13.           polycntVL_phase = polycntVL_maxphase;
  14.       }
  15.       chn3_clk_source_prv = *chn3_clk_source;
  16.     }
  17.     else {
  18.       // channel 3 uses the 7-bit polynomial counter
  19.       if (*chn3_clk_source < chn3_clk_source_prv) {
  20.         // update on negative edge
  21.         if (--polycnt7_phase < 0)               // 7-bit
  22.           polycnt7_phase = 126;
  23.       }
  24.       chn3_clk_source_prv = *chn3_clk_source;
  25.       if (--polycntVL_phase < 0)                // variable length
  26.         polycntVL_phase = polycntVL_maxphase;
  27.     }
  28.     // read polynomial counter tables
  29.     polycnt4_state = (int) t.polycnt4_table[polycnt4_phase];
  30.     polycnt5_state = (int) t.polycnt5_table[polycnt5_phase];
  31.     polycnt7_state = (int) t.polycnt7_table[polycnt7_phase];
  32.     polycntVL_state = (int) polycntVL_table[polycntVL_phase];
  33.  
  34.     // update the phase of all oscillators
  35.     clk_62500_phase--;
  36.     clk_1000_phase--;
  37.     clk_50_phase--;
  38.     clk_1_phase--;
  39.     chn0_phase -= chn0_run;
  40.     chn1_phase -= chn1_run;
  41.     chn2_phase -= chn2_run;
  42.  
  43.     // trigger interrupts if enabled
  44.     if ((*int_snd_phase) < 0) {
  45.       // will reload counter later
  46.       int_snd_state = (int_snd_state & 1) ^ 1;          // invert state
  47.       if (enable_int_snd)
  48.         triggerIntSnd();
  49.     }
  50.     if (clk_1_phase < 0) {
  51.       clk_1_phase = clk_1_frq;                          // reload counter
  52.       int_1hz_state = (int_1hz_state & 1) ^ 1;          // invert state
  53.       if (enable_int_1hz)
  54.         triggerInt1Hz();
  55.     }
  56.  
  57.     // reload phase counters if necessary
  58.     if (clk_1000_phase < 0)
  59.       clk_1000_phase = clk_1000_frq;
  60.     if (clk_50_phase < 0)
  61.       clk_50_phase = clk_50_frq;
  62.  
  63.     // calculate oscillator outputs
  64.     if (clk_62500_phase < 0) {
  65.       // simple 31250 Hz oscillator
  66.       clk_62500_phase = clk_62500_frq;                  // reload counter
  67.       clk_62500_state = (clk_62500_state & 1) ^ 1;      // invert state
  68.     }

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: DAVE
« Reply #132 on: 2016.March.02. 13:44:20 »
Találtam egy EP konfignyi cuccot itt bent a munkahelyen :-)

4MHz-es valódi gépen az ep128emu értékeivel egyezik meg.
Turbóval az utolsó sor változik, 50/51 6MHz-en, 7EC 7.12-n.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: DAVE
« Reply #133 on: 2016.March.02. 13:46:49 »
Na, nalam kb igy nez ki. Mondjuk ez egy atmeneti kod, a "ticks" pl tok felesleges, mert mindig 1 az erteke, csak kozben JSep emulatorombol is atvettem dolgokat, es azt reszelgetem, hogy ne kelljen nullarol megirni :) Azaz pl

Code: C
  1.         /* 50Hz counter */
  2.         _cnt_50hz -= ticks;
  3.         if (_cnt_50hz < 0) {
  4.  

irhato lenne sokkal tisztabban kb igy (es majd irva is lesz ...):

Code: C
  1.         /* 50Hz counter */
  2.         if (--_cnt_50hz < 0) {
  3.  

No, de szoval egy reszlet (ez a verzio nincs fenn meg github-on, azert irom igy ... ha majd mukodni is fog normalisan akkor lesz), ebben nincs benne minden, csak peldanak:

Code: C
  1.         /* 50Hz counter */
  2.         _cnt_50hz -= ticks;
  3.         if (_cnt_50hz < 0) {
  4.                 _cnt_50hz = 5000 - 1;
  5.                 if ((ports[0xA7] & 96) == 32)
  6.                         dave_int_tg();
  7.         }
  8.         /* 1KHz counter */
  9.         _cnt_1khz -= ticks;
  10.         if (_cnt_1khz < 0) {
  11.                 _cnt_1khz = 250 - 1;
  12.                 if ((ports[0xA7] & 96) ==  0)
  13.                         dave_int_tg();
  14.         }
  15.         /* counter for tone channel #0 */
  16.         if (ports[0xA7] & 1) { // sync mode?
  17.                 _cnt_tg0 = ports[0xA0] | ((ports[0xA1] & 15) << 8);
  18.                 _state_tg0 = 0;
  19.         } else {
  20.                 _cnt_tg0 -= ticks;
  21.                 if (_cnt_tg0 < 0) {
  22.                         _cnt_tg0 = ports[0xA0] | ((ports[0xA1] & 15) << 8);
  23.                         _state_tg0 ^= 1;
  24.                         if ((ports[0xA7] & 96) == 64)
  25.                                 dave_int_tg();
  26.                 }
  27.         }
  28.         // ... stb stb stb .... kihagyok par dolgot ....
  29.         _cnt_1hz -= 1;
  30.         if (_cnt_1hz < 0) {
  31.                 _cnt_1hz = 250000 - 1;
  32.                 if (dave_int_write & 4)
  33.                         dave_int_read |= 8; // set latch, if 1Hz int source is enabled
  34.                 dave_int_read ^= 4; // negate 1Hz interrupt level bit (actually the freq is 0.5Hz, but int is generated on each edge, thus 1Hz)
  35.         }
  36.  

A kerdeses dave_int_tg() meg nyilvan nem tul bonyolult entitas:

Code: C
  1. static inline void dave_int_tg ( void )
  2. {
  3.         if (dave_int_write & 1)
  4.                 dave_int_read |= 2;     // set latch if TG int is enabled
  5.         dave_int_read ^= 1;             // negate level
  6. }
  7.  

Es vegul a hirtelen osszedobalt, igen amator teszt program forrasa:

https://github.com/lgblgblgb/xep128/blob/master/doc/intfreq.asm
« Last Edit: 2016.March.02. 14:22:07 by lgb »

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: DAVE
« Reply #134 on: 2016.March.02. 14:19:31 »
mi az a sync bit? sose értettem...
Vigyázat! Szektás vagyok! :)