Z80 proci
2007-01-25T21:24:36+01:00
2010-06-10T13:47:24+02:00
2022-07-25T02:32:24+02:00
  • Ezért jók a ZX-Spectrum emulátorok. Ha több ezer Z80-as játék végigjátszására jók voltak, akkor valószínűleg többé-kevésbé korrektül megvalósítják a Z80-as procit. Esetleg még a mame project körül is körbenéznék. Ott is jó sok progin tesztelték a dolgot.
    Mutasd a teljes hozzászólást!
  • Van több forráskódom is, kb 6 Jávás Z80 emulátort szedtem össze -mármint forráskódot. De nem tudtam/akartam egy az egyben átültetni a programomba, így ötleteket véve újraírtam (pár eljárást másoltam).

    Amíg egy-egy gépi kódú utasítás nem működött jól az emulátorban, addig nem volt gond, mert megnéztem mások kódjait. Most viszont nem tudom kiszűrni, hogy melyik gépi kódú utasítás a hibás.
    Emulátorban csak addig jutok, hogy pl. a BASIC RND utasítása hibás. Itt viszont több ezer gépi kódú utasítás hajtódik végre. És mivel "random", így nincs két egyforma lefutás sem, mármint a regiszterek és a memória tartalma is változik. Ha nem így lenne akkor nem lenne gond, mert van egy másik Jávás TVC emulátor, amiben figyelni lehet a proci regisztereit, így egyszerűen végigvizsgálnám az RND utasítást és látnám, hogy hol téved a programom. Amúgy az a másik TVC emulátor sem tökéletes, más BASIC utasítások abban is hibásak.

    Pár információt össze kell még szednem és akkor az RND utasítást részekre bontva nyomon tudom követni, hogy meddig működik jól. Remélhetőleg.

    Másik lehetőség, hogy egyesével végignézem a gépi kódú utasításokat és próbálom megtalálni a hibát. Ez elég őrült feladat, mert több mint 1000 eljárást kell végig nézni.

    Jó esélyel valamelyik jelzőbit állítás nem jó, de ezen túl mindegyik eljárás azt csinálja amit kell. De ezeket a jelzőbiteket még megérteni is sok, nem hogy leprogramozni.

    Esetleg valami tesztprogram lenne jó, amivel tesztelni lehetne, hogy egy-egy gipi kódu eljárás azt csinálja e amit kell.
    Mutasd a teljes hozzászólást!
  • Vannak elég jó linuxos zx-spectrum emulátorok, azokban van z80 emulátor is forrásban. De van xtrs (TRS-80 emulátor szintén forrásal), de láttam anno Pl. javában írt Z80 emulátort is.
    Mutasd a teljes hozzászólást!
  • Csak javítanám a linket:
    enterpriseforever.com, mert az ORG-os oldal átment "bizniszbe".

    Amúgy Ezen az oldalon található az a Videoton TVC emulátor, amit írok. Vagy 50-60 játékkal már játszhatunk, de még van 1-2 Z80 utasítás ami nem jól működik, ezért sok program még nem fut, vagy hibásan.
    A forráskódot is le lehet tölteni, ha valaki be akarna szólni, hogy milyen tákolmány ez.
    Mutasd a teljes hozzászólást!
  • Megtaláltam én is, köszi!

    Amúgy még este találtam egy működő Z80 emulátor forráskódot. Bár még gyerekcipőben jár. Azóta fejlesztett rajta programozó, csak az újabb változatokat sajna nem lehet letölteni. Én is rögtön találtam benne egy hibát.

    De úgy látom abban is a FLAG regisztereket ritkán piszkálják "kézzel", hanem feltöltenek valami tömböt a program elején, és onnan veszik sok esetben az értékét.

    Megpróbálom majd ezt a kódot életre kelteni, aztán meg csak sikerül idővel a hibákat is javítani benne.
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!

  • Ezt az oldalt ismered:

    www.enterpriseforever.org

    ???

    Ott pont ilyen emberekre van szukseg ! Sokan ott vannak a regi EP- sek kozul ...


    Mutasd a teljes hozzászólást!
  • Jó hogy ennyi dokumentáció van. Szereztem egy új könyvet, ez is megint teljesen mást ír.
    Az egyik leírás szerint az OR utasítás a H jelzőbitet egyértelműen 1-re állítja, a másik szerint 0-ra. Nagyon jó.
    Mutasd a teljes hozzászólást!
  • Lehet a tudástárba leszek küldve, de elkezdtem szép kényelmesen készíteni egy Z80 emulátort. Van sok dokumentációm (persze ajánlhattok), de 1-2 alapvető kérdésben (Flag jelzőbitek) káosz van.
    Csak hogy tisztán lássak:
    Az "S" jelzőbit mindíg a legfelső bitet tárolja, tehát mondjuk 8 bites művelet után számolhatok így:
    IF ((A and 128)==128) S=1 else S=0;
    16 bites számítás után:
    IF ((F and 128)==128) S=1 else S=0; // AF F a felső byte
    A Z gondolom egyszerű:
    IF (A==0) Z=1 else Z=0;
    A C-vel sincs gondom, az N egyértelmű.
    A P/V Paritás bitről viszont eltérő dolgokat olvastam, de ha ez (logikai művelet után) azt jelezné, hogy a művelet végeredménye páros e, akkor:
    IF Z=(A and 1);
    Ha túlcsordulás a kérdés azt is megoldom. De még a H regisztert nem tudom, hogy hogy állítsam be. Ezt a kódot találtam, de nem tudom tökéletesen működik e:
    A=a-b; if (( ( (a&0x0f)-(b&0x0f) )&0x0f )>0){ H=1; }else{ H=0; }

    Ha valaki megerősítené, hogy tényleg jók e ezek, azt megköszönném, mert lehet csak hetek múlva fog kiderülni ha sikerül az összes utasítást megírni.

    De ha valaki tud egy működő Z80 emulátort, amibe beírhatnék pár utasítást és megnézhetném, hogy a regiszterek hogy változnak futás közben, az jó lenne. Egy emulátort leszedtem, van benne debugger, de a memóriába nem lehet írni (Külön gép kezelést tanulni, meg programokra vadászni meg nincs kedvem). De ha tudtok komplett emulátor forráskódot az is jöhet. Egyet találtam, de ott a flag regiszterek beállítását néha úgy oldják meg, hogy nem igazán tudom megérteni.
    Mutasd a teljes hozzászólást!
  • Nem, még a gyártó tesztelte, és a chip tetejére nyomtatott egy H vagy L betűt, attól függően, hogy melyik fél volt használható...

    Ha jól emlékszem a hajdani Spectrum Világ cikkeire, sok játék ki is használta a 2*32KB memóriát (bár nem volt egészen szabványos az átkapcsolás módja, különféle megoldások léteztek).

    Szerintem legszebben az EP128-on volt megoldva a lapozás (lásd itt).
    Mutasd a teljes hozzászólást!
  • Ja. Csak Sinclair előzőleg tesztelte hogy melyik fele a hibás, aztán az a fele volt csak engedélyezve. Ha pedig a 16K-s spectrumod saját magad bővítetted, akkor a felső 32K-t lehetett lapozhatóra csinálni.

    Amúgy anno a nagybátyám csinált egy nagyon egyszerű Z80-as számítógépet amiben 8K SRAM volt, és úgy lehetett programozni hogy feldugtad a spectrum bővítőjébe és "beírtad" az első 8K-ba a gépi kódú programot. Amiből persze a Spectrum nem vett észre semmit, mivel az csak olvasható, de az SRAM-ba be lehetett írni. Ez alatt a másik gép procija le volt állítva. Aztán kép kikapcs, bővítő lehúzva, proci indít és reset, és lám már működött is a gép. LED-eket vezérelt, zenét / digitális hangot játszott le (persze csak pár másodperc, 1 biten digitalizálva).
    Mutasd a teljes hozzászólást!
  • A frissítéshez kb annyit kell tudni, hogy:

    - minden DRAM-ot egyszerre lehet frissíteni, tehát mindegy, hogy 1*16KB vagy 100*16KB
    - csak a címbitek felén kell végigfutni, tehát pl 64KB -> 16 címbit -> a fele 8bit
    - az R-regiszter csak 7 biten számlál, de kiegészítő hardverrel természetesen bővíthető a számláló.

    +1: Annó 1 bites DRAM-ok voltak használatban (4116, 4164, 41256), amiket nyolcasával szereltek be.
    +2: De volt 4132 is, ami igazából egy olyan 4164 volt, amiben egyetlen hibás bit volt (és Clive Sinclair boldogan beszerelte a Spectrumba, mivel olcsón tudta megvenni.)
    Mutasd a teljes hozzászólást!
  • Persze, felülről kompatibilis volt a 8080-nal, az új utasítások a kihasználatlan kódhelyekre kerültek.
    Mutasd a teljes hozzászólást!
  • Ezt úgy érted, hogy 64K memória volt a gépben, vagy 8 darab 64K-s memória volt rákötve egyszerre?

    Amúgy a TVC is 16K-s lapokra osztotta a memóriát és így tudott 128K memóriát kezelni, de kezelhetett volna többet is, ha úgy tervezik. Bár ennek egy része ROM, de így is több mint 64K RAM-ot kezelt és frissített. (Bár ezt a frissítést még nem látom át teljesen.)

    Szóval abban az időben ez a 16K-s korlát nem okozott nagy gondot, ha meg több memóriát akartak valami megoldást találtak rá.
    Mutasd a teljes hozzászólást!
  • emlékeim szerint, vitatkoznék...

    a Z80-as nagyjából kompatibilis volt a 808x-el... ez a CP/M miatt volt hasznos.

    üdv....
    Mutasd a teljes hozzászólást!
  • Ahogy én emlékszem, az Enterprise-hoz lehetett 41256 (256Kb-s) DRAM-ot használni (bővítőkártyán, max 2*8 db-t), ott a frissítéshez kiegészítő számlálókat használtak (alsó 7bit: a0-a6 R-regiszter felső két bit: külön számláló)
    Mutasd a teljes hozzászólást!
  • Homelab III.
    Mutasd a teljes hozzászólást!
  • Milyn gép?
    Mutasd a teljes hozzászólást!
  • Igaz, de nekem 64kb-es RAM-ok voltak, 8db. Ráadásul a ROM fedte területet ki tudta lapozni, így látszott mind a 64KB. Tetszett nagyon
    Mutasd a teljes hozzászólást!
  • Hmm, ez elkerülte anno a figyelmemet. 64KB-os memóriát frissített emlékeim szerint.
    Akkor hogyan csinálta?


    A dramokat is eleg volt frisstshz az also cmkt piszkalni.
    + 32kb-os chipekbol rakhattal ra akar 100-at is.

    Mutasd a teljes hozzászólást!
  • mit nyertek azzal, hogy nem nyolcbitesre csinálták (vagy tizenhatra


    A refreshnek az volt a lényege, hogy x időnként meg kellet címezni a dramot, vagyis frissíteni.
    Az eredeti órajel csak 128 címet viselt el. Több címnél már nem lett volna meg az 'X. időnként'.
    X=órajel/128
    Mutasd a teljes hozzászólást!
  • Hmm, ez elkerülte anno a figyelmemet. 64KB-os memóriát frissített emlékeim szerint.
    Akkor hogyan csinálta?
    Mutasd a teljes hozzászólást!
  • Note: A Zilogot az Inteltől kilépétt mérnökök hozták létre, mivel a cég nem akarta megcsinálni a 8080 as továbbfejlesztett változatát (illetve később csináltak valami mást, a 8085-öt, de az semmiben sem hasonlít a Z80-hoz, inkább a hardvert módosították, hogy kompaktabb legyen pl. beágyazott rendszerekhez).

    Ha van gyenge pont a Z80-ban, az a hétbites R regiszter: mit nyertek azzal, hogy nem nyolcbitesre csinálták (vagy tizenhatra, ha már itt panaszkodunk)... (Ugyebár a 7 bittel 16KB, 8 bittel 64KB, 16 bittel 4GB DRAM frissíthető (RAS only frissítés))
    Mutasd a teljes hozzászólást!
  • Nem is degradálólag írtam Én nagyon szerettem, jó utasításkészlete volt (van), 4MHz-es (Z80A). Csak elszállt felette az idő vasfoga.
    Mutasd a teljes hozzászólást!
  • Azért nem csak nosztalgia. Amennyire én tudom, Pl. egyes MP4 lejátszókban még ma is ez van, persze ma már nem 3.5 Mhz-en megy hanem vagy 12-n. Nem volt rossz kis cucc az anno, sokkal szerencsésebb csillagzat alatt született mint az x86. Csak sajnos nem az a vonal ment tovább, hanem az Intel gányolmánya.
    Mutasd a teljes hozzászólást!
  • Meg occo is
    Most néztem a primo nyák készlete 13000Ft. Egy Atomos mITX 15000.
    Szóval a nosztalgia drága mulatság
    Mutasd a teljes hozzászólást!
  • Hmm.. Szerintem inkább dobjatok össze ey PIKO ITX-es vasat és szereljétek bele egy teddy-mackóba. Azt az EMO-s csajok is jobban díjaznák.

    (ja most látom 3 éves topic )
    Mutasd a teljes hozzászólást!
  • A Z80 nem tud sem lefagyni, sem exception-t dobni... Valamit minden gépikódra kell csináljon, legfeljebb a fejlesztők úgy döntöttek, hogy amit csinál, az nem hasznos a felhasználóknak... például egy olyan balra léptetés, ami a legalsó bitet meghagyja (mint jobbra léptetésnél a legfelsőt az előjel miatt).
    Mutasd a teljes hozzászólást!
  • Üdv mindenkinek!

    Én mostanában olvasgattam a Z80-as prociról. Ami érdekelne, az a "nem dokumentált" utasítások (és a két "elveszett" jelzőbit).

    Amikor megtervezték, megépítették a processzort, akkor ugye dokumentálták, hogy milyen utasításokat ismer.
    Ezután hogyan alakultak ki, hogyan találták meg a "nem dokumentált" eljárásokat?

    Feltételezem ezeknek a kódja olyan kell hogy legyen, ami eredetileg nem volt használva, és a processzornak valami hibát kellett generálnia (esetleg lefagyni, vagy meghívni egy szubrutint), ha ilyet talál.
    A programozók hogy tudták ezt saját céljaikra felhasználni? Esetleg átírhatták ezt a hibakezelő rutint, de azt olvastam, hogy a hardvernek (Z80 emulátornak) is támogatnia kell ezeket, tehát lehet valami "hardver hiba" vagy hasonló lehet a háttérben.

    Illetve még a kérdésem, hogy a könyvek szerint nem használt két jelzőbitet el lehet e valahogy érni, fel lehet e használni? Még nem rágtam át magam minden utasításon, de feltételezem nincs erre beépített utasítás, legfeljebb valami kerülő út.

    Ha valakinek van infója az ossza meg.
    Remélem ez még a társalgó kategóriába belefér és nem a tudástárban lenne a helye.

    Ha valaki írt már Z80 emulátort az is elmondhatja a tapasztalatait, véleményét.
    Mutasd a teljes hozzászólást!
  • Még mindig nem tudod mit akarsz.
    Ha nem tudjuk mi a cél, bármelyik úton eljutunk oda.
    A hozzáállásod olyan tökéletesen halott projektet jósol.
    Mutasd a teljes hozzászólást!
Címkék
abcd