<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix"><br>
      Dobry den, zkusim to vzit postupne:<br>
      <br>
      Co se tyka implementace RS232 v Unikarte, tak nevim jakou mate
      verzi. Pokud tu puvodni, kterou jsem vyvijel spolecne s Vaskem
      Peroutkou, tak ta - pokud si pamatuju umi pres API nastavit vse,
      vcetne bd, HW/SW rizeni toku a nastaveni limitu pro interrupty z
      bufferu RS232... Pokud mate tu novejsi verzi Unikarty od Bohouse,
      tak tam bohuzel netusim jake jsou moznosti obsluhy SIO.<br>
      <br>
      Podival jsem se na vas zdrojak. Zkusim to bodove:<br>
      <br>
      1) Jen drobne doporuceni - pro umisteni obecneho programu bych
      spise doporucoval rozsah adres 0x2000 - 0x7fff, kde mate bez
      ohledu na rezim, ci mapovani vzdy zaruceno, ze tam bude RAM<br>
      <br>
      2) Pouzivate IM 1, coz je rezim, ktery pri interruptu zavola RST
      0x18 - zadna posvatna adresa na 0x1039 neexistuje. Bud si musite
      odmapovat dolni ROM a umistit na adresu 0x0038 obsluznou rutinu,
      nebo je potreba pouzivat rezim IM 2 u ktereho si na nejake sude
      adrese v pameti ulozite interrupt vector - adresu interrupt
      handleru. Horni cast adresy vectoru vlozite do registru I. Dolni
      (vzdy suda!) cast adresy se posle na ctrl port prislusne brany
      PIOZ80.<br>
      <br>
      3) Vsimnul jsem si, ze vas interruipt handler konci instrukci RET.
      Vzhledem k tomu, ze interrupt zavolalo PIOZ80, tak mu musite
      sdelit, ze obsluzna rutina uz skoncila a je mozne zacit opet
      strasit. K tomu slouzi navratova instrukce RETI.<br>
      <br>
      4) CTC0 nastavujete do rezimu MODE0, tzn. ze ve chvili, kdy
      zapisete kontrolni slovo, tak CTC0 output prejde do stavu "0" a
      zustane v nem naveky, nebo dokud nedokoncite load. Pak se spusti
      odecet a na jeho konci prejde CTC0 output do stavu "1", kde
      zustane uz naporad. POZOR: CTC0 je do PIOZ80 pripojeno na PA4 pres
      invertor! Vas interrupt controller musi byt tedy citlivy na uroven
      HIGH.<br>
      <br>
      5) Aby jste se vyhnul tomu, ze prijde interrupt drive, nez chcete,
      nebo naopak, ze neprijde vubec, tak doporucuji pri inicializaci
      dodrzet nasledujici poradi procesu:<br>
      <br>
      - sdelit procesoru DI<br>
      <br>
      - optimalne bych pres PC2 na i8255 zablokoval interrupty z CTC2,
      aby se nam do toho nemotaly<br>
      <br>
      - poslat CTRL MODE0 do CTC (output prejde do klidoveho stavu )<br>
      <br>
      - nastavit registr I a vlozit dolni cast interrupt vectoru do
      PIOZ80<br>
      <br>
      - dokoncit inicializaci PIOZ80 s tim, ze ve chvili kdy se
      nastavuje Interrupt Controll Word ( ICW - xxxx 0111 ), tak 4. bit
      nastavte "1" - tzn.,  ze bude nasledovat IC_MASK. V tuto chvili se
      provede reset pripadneho interruptu, ktery by tam mohl zakerne
      cekat. Ve chvili, kdy zapisete IC_MASK, tak se provede scan stavu
      portu a vy nutne potrebujete, aby byl v klidu /CTC0 = "1"<br>
      <br>
      - sdelit procesoru EI<br>
      <br>
      - dokoncit load CTC0, cimz se spusti pocitani<br>
      <br>
      Vic mne toho ted od pohledu do toho zdrojaku nenapada. Dejte vedet
      jak jste dopadnul.<br>
      <br>
      Michal<br>
      <br>
      <br>
      Dne 1.2.2017 v 15:05 malinsky napsal(a):<br>
    </div>
    <blockquote
      cite="mid:3EC50E50-75ED-45A4-ABBB-B0BA514ED39C@gmail.com"
      type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=windows-1252">
      <span>Zdravim vsechny delegaty sharpi konference!</span>
      <div><br>
      </div>
      <div>Po vecerech se pokousim o naprogramovani jednoduche obsluhy
        asynchronniho prenosu dat pres RS232C (na Unikarte). Jako
        nejcistsi mi pripada pravidelne generovani preruseni s frekvenci
        dostatecnou pro bezpecne hlidani provozu na Rx/Tx portech. </div>
      <div>K tomu bych rad vyuzil rychle bezici CTC0 obvodu 8253 v modu
        0 (pro 9600 bd potrebuju frekvenci cca 1kHz nebo vic), jehoz OUT
        je podle manualu priveden na pin 4 brany A PIO; to by pak melo
        obstarat generovani INT.</div>
      <div>(Uvedomuju si, ze na neco takoveho by v principu stacilo i
        “znasilnovani” CTC1-&gt;CTC2-&gt;INT, ale pouziti CTC0 mi prijde
        cistsi.)</div>
      <div><br>
      </div>
      <div>Procetl jsem manualy k dotycnym obvodum a cvicne
        naprogramoval kratkou rutinu v asembleru pro mod 700, ale at
        zkousim, co zkousim, spravne mi to funguje jen v emulatorech (v
        obou, ktere jsem zkusil, tj. ten od Z. Adlera a stejne tak  i v
        mz800emu), tj. CTC0 vyvola preruseni, ktere se korektne
        obslouzi; na skutecnem zeleze, co mam doma, to ale vypada, ze se
        interrupt od CTC0 nikdy nevyvola. </div>
      <div><br>
      </div>
      <div>Zkousel jsem vsechno mozne (im1 vs. im2, mod 700 vs. mod 800,
        ruzne maskovani preruseni v PIO mod. 3, ruzne konfigurace I/O
        pinu brany A,  interrupt triggrovany na HIGH i LOW, AND i OR
        nemaskovanych vstupnich linek, dokonce i hrani s nastavenim PC0
        a PC2 od 8255), ale nic nepomohlo. </div>
      <div><br>
      </div>
      <div>Nakonec jsem Sharpa rozebral a jednoduchym amaterskym
        osciloskopem (tj. zvukovkou stareho laptopu) jsem vyzkousel OUT0
        pin 8253, a ackoli citac prokazatelne bezi (v tom programku se
        prubezne zobrazuje rychle se menici obsah adresy E004), na OUT0
        neni zadna aktivita. (Pozn.: Tentyz “osciloskop” na OUT1 vidi
        pekny sekundovy tik, na datovem portu 8253ky pak bourlivou
        aktivitu, takze chyba snad neni na mem “prijmaci”; mimochodem,
        citac CTC0 nastavuju na a0a0, mod 0, tj. ocekaval bych nejakych
        30 pulzu na OUT0 za sekundu, coz by i tak primitivni aparat jako
        je stara zvukovka mel pobrat.)</div>
      <div><br>
      </div>
      <div>Chtel bych proto pozadat o pomoc, a to hlavne ve forme
        kontroly kodu onoho kratkeho testovaciho programku nezavislyma a
        zkusenejsima ocima - mzf vcetne komentovaneho zdrojaku pro sdcc
        (asembler v code.s) je ke stazeni na </div>
      <div><br>
      </div>
      <div><a moz-do-not-send="true"
href="http://www-ucjf.troja.mff.cuni.cz/%7Emalinsky/files/v3b-preruseni_na_zeleze-CTC0-var2.zip">http://www-ucjf.troja.mff.cuni.cz/~malinsky/files/v3b-preruseni_na_zeleze-CTC0-var2.zip</a></div>
      <div><br>
      </div>
      <div>Taky bych chtel poprosit, jestli byste nekdo mohl
        prilezitostne to mzfko otestovat na svem zeleze - melo by to
        delat to, ze v horni casti obrazovky se vypisuje cca radek a pul
        stridajicich se znaku, o dva radky niz se zobrazuje aktivita na
        E004 a jeste niz by melo nezavisle bezet nekolik radku barevnych
        ctverecku (ty prave vyrabi interrupt handler, a ty jsou taky
        presne tim, co na svem zeleze nevidim, ale v emulatorech vesmes
        ano). Mohli byste mi dat vedet, jestli se na vasich strojich ty
        ctverecky zobrazuji nebo ne?</div>
      <div><br>
      </div>
      <div>Predem dekuju a omlouvam  za predlouhe slohove cviceni (a za
        svoji pitomost).</div>
      <div><br>
      </div>
      <div>Michal Malinsky</div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
SharpMZ mailing list
<a class="moz-txt-link-abbreviated" href="mailto:SharpMZ@mail.ordoz.com">SharpMZ@mail.ordoz.com</a>
<a class="moz-txt-link-freetext" href="http://mail.ordoz.com/mailman/listinfo/sharpmz">http://mail.ordoz.com/mailman/listinfo/sharpmz</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>