Welcome, Guest. Please login or register.


Author Topic: Assembly programozás (Read 254513 times)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #465 on: 2013.April.27. 12:27:31 »
Quote
a megszakításkezelés ugyanolyan, mint egy egyszerű DI + RST 38H utasítás
Akkor tök feleslegesen indul minden megszakítás kezelő kód ( amit csak láttam ) azzal hogy DI, mert mire megkapja a vezérlést a CPU által már rég le vannak tiltva ? :)
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #466 on: 2013.April.27. 12:41:30 »
Quote from: Z80System
de igazából MEG NEM SZÜNTETJÜK a lehetőségét, elvileg lehetséges hogy az EI után de még a RET előtt megszakból megszakít újra.
A Z80 érdekes tulajdonsága, hogy közvetlenül EI után nem fogad el megszakítást (még akkor sem, ha az EI előtt már engedélyezett volt, tehát például sok egymást követő EI futása közben átmenetileg tiltottak a megszakítások), tehát csak a RET után ugrik újra a megszakításkezelő rutinra.

Quote from: Z80System
Ebből viszont az is következik, hogy még csak nem is kötelező az előbb említett szál kezelő megszakításból előszor RET -et kiadva valami nulláslap szerű helyre rakott kódra ugrani, a stack megfelelő kezelése mellett akkor a megszakításkezelőből egyből ugorhatunk a kiválasztott új szálra ?
Igen.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #467 on: 2013.April.27. 12:42:44 »
Quote from: Z80System
Akkor tök feleslegesen indul minden megszakítás kezelő kód ( amit csak láttam ) azzal hogy DI, mert mire megkapja a vezérlést a CPU által már rég le vannak tiltva ?
A DI nem kell, igaz, nem is árt, csak elfogyaszt néhány ciklust.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #468 on: 2013.April.27. 12:54:47 »
Quote
A Z80 érdekes tulajdonsága, hogy közvetlenül EI után nem fogad el megszakítást (még akkor sem, ha az EI előtt már engedélyezett volt, tehát például sok egymást követő EI futása közben átmenetileg tiltottak a megszakítások), tehát csak a RET után ugrik újra a megszakításkezelő rutinra.
Hát erre már csak azt tudom mondani, hogy: beszarás. :)

De legalább akkor aki betartja hogy EI,RET -tel zárja a megszakját, annak nem lesz megszakból megszakja, vagyis iskolapélda szerűen tudja használni, aki meg a megszakkezelőjében korábban adja ki az EI -t, az meg magára vessen, nyilván tudja mit csinál.

Egyébként letiltott megszakítások alatt (akkor előbbiek szerint az tökmindeggy, hogy főprogram vagy megszak "alatt" vannak letiltva) bekövetkező megszakok az engedélyezés után ( következő utasítás után ... :) ) egyből kiváltódnak z80 által, vagy pedig azokat a megszakokat már elbuktuk, és csak akkor váltódnak ki, ha a megszak pillanatában a z80 epp EI után van ? Ráadásul ha elbukós, akkor akár zsinórban többet is elbukhatunk ? Vagy nem elbukós, és kiváltódik, de csak 1X, pedig lehet hogy 10X volt már olyan megszak igény ?
« Last Edit: 2013.April.27. 13:03:50 by Z80System »
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #469 on: 2013.April.27. 13:10:38 »
Quote from: Z80System
Egyébként letiltott megszakítások alatt (akkor előbbiek szerint az tökmindeggy, hogy főprogram vagy megszak "alatt" vannak letiltva) bekövetkező megszakok az engedélyezés után ( következő utasítás után ... :) ) egyből kiváltódnak z80 által, vagy pedig azokat a megszakokat már elbuktuk, és csak akkor váltódnak ki, ha a megszak pillanatában a z80 epp EI után van ? Ráadásul ha elbukós, akkor akár zsinórban többet is elbukhatunk ? Vagy nem elbukós, és kiváltódik, de csak 1X, pedig lehet hogy 10X volt már olyan megszak igény ?
A megszakításkérést (külön az 1 Hz-es, hang, és video megszakítást) a DAVE tárolja a B4h porton, és a törléséig aktív marad. Tehát ha DI és EI között kér megszakítást egy eszköz, az nem veszik el, feltéve, hogy nem érkezik újabb, azonos típusú megszakításkérés az első kiszolgálása előtt, vagy a program nem törli a B4h portot a megszakítás kiszolgálása nélkül.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #470 on: 2013.May.04. 16:02:03 »
Grafikus ( tehát a kérdés szempontjából RND ) adatot akarok mozgatni pop/push -al, és igénybe venném ehhez az AF regiszterpárt is.

Kérdés hogy F -en keresztül is mozog az adat módosítás nélkül, ha nem teszek a pop és push közé olyan utasítást, ami flag -et állít ?

Mozog alatt azt értem, hogy a pop -al beolvasott byte fog kikerülni az F regiszterből is, illetve nem kuszálja össze a CPU -t semilyen beolvasott F regiszter érték ?
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #471 on: 2013.May.04. 16:09:20 »
Quote from: Z80System
Kérdés hogy F -en keresztül is mozog az adat módosítás nélkül, ha nem teszek a pop és push közé olyan utasítást, ami flag -et állít ?
Igen, az F is használható másolásra, illetve valószínűleg használni is kell (és az AF'-et is) ahhoz, hogy valóban gyorsabb legyen az LDI utasításoknál. A Z80 F regiszterében nincs olyan bit, amelynek az értéke nem változtatható, és egyiket sem használja speciális célra (pl. megszakítások engedélyezésére).

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #472 on: 2013.May.04. 16:15:27 »
jól emlészem hogy vannak valami atombiztosan működő "titkos" z80 opcode -ok, amivel lehet IX és/vagy IY regisztert 8 bitesként kezelni ? van ezekről valahol leírás ?
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #473 on: 2013.May.04. 16:22:50 »
Quote from: Z80System
jól emlészem hogy vannak valami atombiztosan működő "titkos" z80 opcode -ok, amivel lehet IX és/vagy IY regisztert 8 bitesként kezelni ? van ezekről valahol leírás ?
Ha az assembler támogatja, akkor egyszerűen IXL, IXH, IYL, és IYH regisztereket kell használni (egyes assemblereknél I nélkül). Ezek gyakorlatilag az L-t és a H-t helyettesítik. Nem lehet azonban egy utasításban IXL/H és IYL/H is, és az L, H, és HL regiszterekkel sem használhatók együtt, illetve a CBh prefixes utasításoknál sem működnek (ott a DDh/FDh prefixnek más hatása van). Tehát ezek az utasítások hibásak:
Code: [Select]
        LD    IXL, IYL
        LD    IYH, (HL)
        LD    IYL, H
        SLA   IXH
Ez viszont jó (LD L, H + DDh prefix):
Code: [Select]
        LD    IXL, IXH
« Last Edit: 2013.May.04. 16:28:32 by IstvanV »

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #474 on: 2013.May.04. 16:37:30 »
A z80 leírásom ezt írja az LDI -ről:

M Cycles        T States                        4 MHz E.T.
4                  16 (4, 4, 3, 5)                 4.00

ezt meg az egybájtos  PUSH/POP -ról:

M Cycles        T States                        4 MHz E.T.
3                  11 (5, 3, 3)                    2.75


Most akkor az első kérdés hogy ezeket így el lehet hinni, ezek ennyi idő alatt fognak lefutni ?

Mert ha így van, akkor legjobb esetben is 25% -ot lehet megtakarítani a push/pop -pal az ldi -hez képest ... nem biztos hogy első körben megéri szórakozni vele, tekintve hogy SP -t milyen nehéz kezelni a scanline -ok között, és sprite -oknál ráadásul tök rövidek a sorok, sp- nél nehézkes a forrás/cél közötti váltás is ... ha egy dupla sebességért csinálhatnám akkor megérné ... de vacak 25 % -ért már nem egy nagy nyeremény ...
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #475 on: 2013.May.04. 16:57:20 »
Itt beszéltünk ilyen PUSH/POP képmozgatásról.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #476 on: 2013.May.04. 18:24:48 »
Mi a mák az "M Cycle" meg a "T State" ?
Z80 System

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Assembly programozás
« Reply #477 on: 2013.May.04. 18:53:40 »
Quote from: Z80System
Mi a mák az "M Cycle" meg a "T State" ?

Amennyire tudom: m-cycle az a machine cycle, ami Z80 szinten egy muveleti lepest jelent, es tobb orajelciklust (ez lenne a T) foglal magaban, ami 3-6 orajelciklusig tart. Az M-cycles kozul az elsot hivjak - meglepo modon - az elsonek, azaz M1 (az ha minden igaz az opcode fetch lenne, ezt jelzi a Z80 is az M1 laban). Ha esetleg valahol tevedtem volna, javitsatok ki, mar kb egy evtizede volt, amikor Z80 emulatort irtam (vagy hmmm probaltam irni).

Ez a fo kulobseg a Z80 es a 65xx kozott: ez utobbinal nincs kulon, ott egy elemi muvelet (pl memoriaolvasas) pontosan egy "valodi" orajelciklusig tart, ezert ott a memoriat az orajellel engedlyezik es egy RW/RD jel van egyetlen vezeteken "kodolva" a muveletet, mivel az orajel egy szintjen (PHI2) _mindig_ es _mindenkeppen_ memoriamuvelet van. Ezert a 65xx ugyan gyorsabb, amde a memoria sebessege limitalo tenyezo, ezert van, hogy 65xx relative alacsonyabb orajellel mentek mint a Z80 (modern 65xx cpu-k 20Mhz-en is elmennek ma mar, igaz ehhez pl - ha jol szamolom 25ns - realisan nezve mininum 10-20ns - sebessegu RAM kell).

Most megprobaltam rakeresni is, hogy jol irtam-e le a dolgokat, es meglepo modon wikipedian egesz jol ott van meg 65xx 68xx-rol is pont irnak! Itt: https://en.wikipedia.org/wiki/Zilog_Z80#Instruction_execution
« Last Edit: 2013.May.04. 19:20:37 by lgb »

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Assembly programozás
« Reply #478 on: 2013.May.04. 19:38:29 »
Quote from: Z80System
jól emlészem hogy vannak valami atombiztosan működő "titkos" z80 opcode -ok, amivel lehet IX és/vagy IY regisztert 8 bitesként kezelni ? van ezekről valahol leírás ?

Szerintem ez egesz jo leiras az "erdekesebb" vagy nem tul jol dokumentalt z80 dolgokrol: http://www.z80.info/zip/z80-documented.pdf

Illetve ez is erdekes lehet: http://www.z80.info/decoding.htm

Ez utobbi alapjan csinalgattam a disassemblert az epbas projectembe hogy ne kelljen minden opcode-t leirni, legyen vmi logika, ami alapjan talan tomorebben dekodolhato disasm szinten is :)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #479 on: 2013.May.04. 20:00:40 »
Alapból kb. mennyi hely van szabadon hagyva az FF szegmensből aza exdos által ? Tehát ha nem nyitottunk meg különösebben semmit, csak úgy elindult a gép, esetleg egy exdos vagy epdos épp fut ?Van mondjuk kb. 2000H üres terület az FF szegmens alsó végén ?
Z80 System