ENTERPRISE KLUB
2023. december 9.,  14-19 óráig
1074 Budapest, Károly krt. 3/A.
Részletek
Welcome, Guest. Please login or register.


Recent Posts

Pages: [1] 2 3 4 5 6 7 8 ... 10
1
Assembly / Re: Assembly programozás
« Last post by Tuby128 on Today at 00:56 »
->
2
Assembly / Re: Assembly programozás
« Last post by Tuby128 on Today at 00:50 »
Kvaczko, a 8086-os processzornál kezdték használni a
LOAD HL, (SP+dd) utasításokat. Veremnek hívták továbbra is.
Ha jött egy szubrutin, aminek dinamikusan kellett 5 integer változó, akkor SUB SP, 4byte*5, szépen eltolták a SP kezdőcímét visszafelé (a verem mérete visszafelé növekszik). És akkor jött a LOAD HL,(SP+2) ill. LOAD (SP+2),HL meg hasonlók.
Ha visszatért a szubrutin egy RETURN paranccsal akkor az SP-t visszatolta az eredeti helyére ADD SP,4byte *5.

A lényeg, hogy 8086-ostól kezdve már nem csak LIFO volt, hanem egy indirekt elérésű tároló, mint ami az EP-nél az IX regiszterek valósítnak meg.
Ez az eljárás nagyon szépen támogatta a C és PASCAL programnyelveket.

 Miért mondod, hogy a processzor cache nem ram? Pont hogy a leggyorsabb statikus ram, ami a processzor órajelén működik. Az a feladata, hogy a memóriából egy szeletet eltároljon, amivel a processzor most éppen nagyon sok műveletet végez. A cache nem egy 65535 x 65535-ös tömb feltöltésére való, hanem arra ha van egy szubrutin, ami dolgozik 20-40 változóval, akkor azokat eltárolja és a végrehajatást gyorsítsa.

 A bottlenek problémát értem. FPGA esetén lehetőségem lenne, megnövelni a Z80 adatbuszát 8 bitről 16-ra vagy 32-re. Ezzel a módszerrel egy órajel alatt 2x illetve 4x annyi op-kódot vagy adatot tudnék kiolvasni. Egy 16bites értékadás LD HL,0x335F (opcode 12 nn nn) vagy egy indexregiszeres értékolvasás LD a,(IX+d) (opkód: DD 7E dd) opkódja 3 BYTE hosszú. Kiterjesztve az adatbuszt 32 bitre, mindezt 1 órajel alatt ki tudnám olvasni. Másik 1 órajel alatt végrehajtani, letárolni.
3
Assembly / Re: Assembly programozás
« Last post by kvaczko on Yesterday at 21:54 »
Gondolkodtam, hogy ha a verem a cache-ben lenne akkor mennyivel gyorsulnának fel a dolgok.
 Az a baj, hogy a Z80 verem utasításai a 16 bites mozgatásban kimerülnek. Nem lehet a veremből kivenni a 4. elemet hogy feldolgozzuk, aztán visszategyük. Emiatt az az érzésem, hogy rengeteg globális változó esetén inkàbb az indexregiszterek lesznek jól használhatók. Főleg azért mert az indexregiszterek által címzett memória közvetlenül is manipulálható. Pl matematikai utasítások végezhetőek el az ix által címzett memórián lévő érték és az akkuval. Tölthető a címzett memória bármelyik regiszterbe majd onnan vissza. Stb.
 Persze lassú a jelenlegi állapotában, de ha kicserélem a Z80-at egy fpga-ra, akkor a cache-be töltöm az indexregiszter által címzett memóriát, és máris minden utasítás csak 2-4 ciklus lesz.

A verem by definition egy LIFO tároló. Innéttől nincs értelme a “kiveszem belőle az x-ik elemet” dolognak. Az a RAM. A processzor cache viszont nem egy RAM, a felhasználó programja nem is férhet hozzá. Ha FPGA-n belül akarsz gyors elérést az indexregiszterek által megcímezhető memóriacímekhez, azt megteheted az FPGA belső RAM-jával. Ugyanakkor meg kell oldanod azt is, hogy ez szinkronban legyen a tényleges RAM-mal, hiszen egy következő utasítással akár direkt címzéssel is hozzá kell tudj férni. A bottleneck (ha az), továbbra is megmarad - hozzá kell nyúlnod a RAM tartalmához. Akkor meg nem vagy előrébb, legfeljebb az “FPGA cache” olvasásakor, ott is leginkább az 1-30ns vs. 70-120ns között van valójában időelőnyöd. Ha az Enterprise 2.0-dat 10ns elérési idejű RAM-mal pakolod tele, akkor ez a kérdés meg eleve okafogyott.
4
Assembly / Re: Assembly programozás
« Last post by Tuby128 on Yesterday at 21:25 »
De mi volt pontosan. Emlékszel még?
5
Assembly / Re: Assembly programozás
« Last post by Ferro73 on Yesterday at 21:13 »
Emlékeim szerint úgy fog reagálni mint a ZX nél az in a,(0FEh) és a in a,(0FCh).

Asmon-ban ellenőriztem. itt leltem a nem dokumentált utasításokra is.
Volt egy A4 lap ZX könyvben ahol fel volt tüntetve mind a 256
DEC HEX AS.CI Z80 utasítás  CD xx utasítás ED xx utasítás.
ezeknek a hiányzó részeit próbálgattam.
6
Assembly / Re: Assembly programozás
« Last post by Tuby128 on Yesterday at 20:49 »
Mi történik akkor, ha a egy valódi z80 egy illegális utasítást kap. Itt most nem a nem-dokumentált utasításra gondolok, hanem egy tényleg nem létező utasításra.
Egy opkódos utasításból nincs ilyen, de pl ED után ha C0 ... FF áll, akkor az nem létezik.
Ilyenkor mi van? Hogyan reagál rá a programszámláló? Átugorja a második opkódot és folytatja tovább a dolgát?
7
Hardver / Re: Rozsdás alaplap
« Last post by Judge on Yesterday at 20:43 »
Igen, az. Köszi.
8
Hardver / Re: Rozsdás alaplap
« Last post by Tuby128 on Yesterday at 19:29 »
Műveleti erősítőnek a C216 kondenzátora?
9
Hardver / Re: Rozsdás alaplap
« Last post by Judge on Yesterday at 18:15 »
Zozo...Koolvin kérdezi, hogy ez a cucc micsoda itt az U23 5 és 12 pontja között...

[ Guests cannot view attachments ]
10
Assembly / Re: Assembly programozás
« Last post by Tuby128 on Yesterday at 16:22 »
Gondolkodtam, hogy ha a verem a cache-ben lenne akkor mennyivel gyorsulnának fel a dolgok.
 Az a baj, hogy a Z80 verem utasításai a 16 bites mozgatásban kimerülnek. Nem lehet a veremből kivenni a 4. elemet hogy feldolgozzuk, aztán visszategyük. Emiatt az az érzésem, hogy rengeteg globális változó esetén inkàbb az indexregiszterek lesznek jól használhatók. Főleg azért mert az indexregiszterek által címzett memória közvetlenül is manipulálható. Pl matematikai utasítások végezhetőek el az ix által címzett memórián lévő érték és az akkuval. Tölthető a címzett memória bármelyik regiszterbe majd onnan vissza. Stb.
 Persze lassú a jelenlegi állapotában, de ha kicserélem a Z80-at egy fpga-ra, akkor a cache-be töltöm az indexregiszter által címzett memóriát, és máris minden utasítás csak 2-4 ciklus lesz.
Pages: [1] 2 3 4 5 6 7 8 ... 10