<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Pokud si správně pamatuju, tak návrat z obsluhy NMI měl vlastní
    instrukci RETN.<br>
    Tedy ne RETI, ta byla pro návrat z maskovatelného přerušení.<br>
    <br>
    A HALT tady nemá co dělat. HALT je instrukce procesoru.<br>
    Jen zatáhnout za BUSRQ, počkat na BUSACK, vykrást (nebo
    zmodifikovat) obsah paměti, a BUSRQ zase uvolnit.<br>
    <br>
    PL<br>
    <br>
    ******************<br>
    <br>
    <div class="moz-cite-prefix">Dne 23.3.2024 v 14:55 Pavel Kořenský
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:50bc0a9d-109a-455f-8a2e-97444451b25c@dator3.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <div class="moz-cite-prefix">To s tím NMI se tenkrát dělalo z
        jiného důvodu.</div>
      <div class="moz-cite-prefix">Totiž aby Z80 nepřestal refreshovat
        DRAM a neresetoval se. Třeba na ZX-Spectrum tohle dělal jeden
        ten prodávaný interface (Disciple ???) který měl v sobě EPROM
        paměť která byla víceméně kopií ZX-Spectrum ROM, ale trochu
        přepsanou, aby se jim tam navíc vešel maličký monitor program
        pro editaci paměti. A ten modul měl tlačítko NMI, které vyvolalo
        přerušení a když k tomu přerušení došlo, byla už namapovaná ta
        stínová ROM a skočilo to rovnou do toho monitor prográmku,
        kterým se dala editovat data v RAM (třeba nekonečné životy do
        her nebo se vyhodila ochrana proti kopírování). A při tom byla
        na stacku pořád návratová adresa do původního místa v programu.
        Když se to celé poeditovalo, tak procesor provedl RETI instrukci
        a než skočil na původní místo, tak se stínová EPROM už odpojila,
        takže i když byly někde v programu třeba kontroly na checksum
        ROMky, program to nepoznal.</div>
      <div class="moz-cite-prefix"><br>
      </div>
      <div class="moz-cite-prefix">Pokud má dnes to Z80 statickou paměť
        (ty tehdy byly příšerně drahé a s malou kapacitou, takže se jako
        RAM běžně nepoužívaly), tak by měl stačit /BUSRQ, /BUSAK,/HALT.</div>
      <div class="moz-cite-prefix">Ani ten RESET by nemusel být mám
        dojem potřeba, protože pokud se HALT uvolní, měl by pokračovat
        kde přestal.</div>
      <div class="moz-cite-prefix"><br>
      </div>
      <div class="moz-cite-prefix">Ale radil bych hledat na Netu. Už je
        to dááááávno, co jsem podobné věci nosil v hlavě.<br>
      </div>
      <div class="moz-cite-prefix"><br>
      </div>
      <div class="moz-cite-prefix">Zdraví PavelK</div>
      <div class="moz-cite-prefix"><br>
      </div>
      <div class="moz-cite-prefix">Dne 23.03.2024 v 13:51 Jindrich Fucik
        napsal(a):<br>
      </div>
      <blockquote type="cite"
        cite="mid:2mo.20ad.4LqUfqcc2wZ.1b%7Dj0s@seznam.cz">
        <meta http-equiv="Content-Type" content="text/html;
          charset=UTF-8">
        <div>V zásadě máš pravdu.</div>
        <div>Pro upřesnění:</div>
        <div>NMI = Non maskable interrupt (to nepotřebuješ)</div>
        <div>HALT = zastavení procesoru a uvedení do HiZ (to chceš)</div>
        <div>(někde mi schází HLDA, ale nevím, jestli jsem na správné
          platformě)<br>
        </div>
        <div>Pozor na to, že po odpojení se ti přestanou refreshovat
          DRAMky, takže to musíš dělat sám.</div>
        <div>A taky to, že po resetu se procesor pokusí začít v nějaké
          ROMce, která provede boot up sekvenci. To taky nechceš, takže
          se různě podstrkoval jiný začátek paměti.</div>
        <div>Respektive se někdy dělalo, že se použilo právě to NMI a
          podstrčil se program, kterej nechal hlavní procesor udělat
          celou tu manipulaci.</div>
        <div><br>
        </div>
        <aside>---------- Původní e-mail ----------<br>
          Od: Pavel Kutina <a class="moz-txt-link-rfc2396E"
            href="mailto:hw@prelude.cz" moz-do-not-send="true"><hw@prelude.cz></a><br>
          Komu: HW-news <a class="moz-txt-link-rfc2396E"
            href="mailto:hw-list@list.hw.cz" moz-do-not-send="true"><hw-list@list.hw.cz></a><br>
          Datum: 23. 3. 2024 13:24:21<br>
          Předmět: Jak na vycteni pameti z beziciho osmibitu?</aside>
        <br>
        <blockquote data-email="hw@prelude.cz">Zdravim, <br>
          <br>
          zjistil jsem, ze pamet neni co byvala, tak potrebuju trochu
          nakopnout: <br>
          <br>
          Mam system se z80, k nemu paralelni SRAM a ja bych docela
          potreboval z nej <br>
          cas od casu vytahnout obsah RAM, nejak ho modifikovat a nacpat
          zpatky. Jo, <br>
          je to presne ta uloha, co se delavala na osmibitech pri
          ukladani snapshotu <br>
          :) <br>
          <br>
          Mam pristupne vsechny signaly procesoru vcetne /BUSRQ, /BUSAK,
          /HALT, NMI a <br>
          tak dale. Jestli mne hlava neklame, postup by mel byt nejak
          takovyhle: <br>
          <br>
          - pozadam z80 o uvolneni sbernice BUSRQ, <br>
          - z80 uvolni a potvrdi BUSAK, <br>
          - poslu do z80 NMI nebo HALT(?), aby mi do toho nekecal, <br>
          - tim by mela byt sbernice volna a procesor v HighZ? <br>
          - externim procesorem si udelam s pameti, co potrebuju (cteni,
          modifikace), <br>
          - uvolnim NMI, do z80 poslu RESET a necham ho najet do nove
          pameti. <br>
          <br>
          Predpokladam, ze tu je jeste par lidi, co to da z hlavy, nez
          zacnu lovit na <br>
          netu hloubeji... <br>
          <br>
          Diky za pomoc. <br>
          <br>
          Pavel Kutina <br>
        </blockquote>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>