Welcome, Guest. Please login or register.


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

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #420 on: 2013.April.14. 11:00:04 »
Hát nem piskóta ... :)
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #421 on: 2013.April.14. 11:19:12 »
És akor a z80 -ban a megszakítások engedélyezettségének állapota a flag ragiszterben van tárolva ?

Tehát nem csak információt nyújt róla, hanem belül a z80 maga is azt a flag -et figyeli ?

Vagyis egy di/ei nem csinál mást a z80 -on belül, minthogy állítja a flag regiszter tartalmát ?

Es akkor:

ei
push af
di
pop af

után a megszakítások újra engedélyezettek lesznek, mert a pop af visszaállítja a flag regisztert is ?

Mert ha meg nem így van, akkor alábbi kódrészlet nem csak olvassa, hanem tiltja is a megszakításokat ... elég durva side effect egy kiolvasáshoz ...
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #422 on: 2013.April.14. 11:32:28 »
Quote from: Z80System
És akor a z80 -ban a megszakítások engedélyezettségének állapota a flag ragiszterben van tárolva ?
Nem arra van külön belső flag (IFF1 és IFF2), csak ebben a speciális esetben másolódik az F-be, pont azért, hogy le lehessen kérdezni.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #423 on: 2013.April.14. 11:53:31 »
Hát jó, akkor gondolom annyit kell tegyek, hogy az előző rutin visszatérései előtt azokban az esetekben, mikor C flag nélkül térne vissza, akkor a visszatérések előtt nyomok egy ei -t, hogy a detektáláshoz kiadott di -t megszűntessem, igaz ?

Másik: és akkor arra, hogy a nick -től visszakapjuk az lpt címét, arra végképp nincs semmi mód, igaz ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #424 on: 2013.April.14. 12:01:51 »
legegyszerűbb ha a CALL után teszel egy JR C-t ami átugrik egy EI-t.

Igen az LPT-t nem lehet lekérdezni Nick-től :-(

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #425 on: 2013.April.14. 13:06:40 »
Ez van az exos leírásban a 0x38 -as címhez:

38h | Interrupt vector | Soft ISR ad.

Az ok, hogy egy megszakításnál a z80 egyfajta CALL -t hajt vegre a 38h -ra, és ott valami utasításoknak kell lennie, amelyik kezeli a megszakítást, majd visszatér.

Gondolom erre 4 byte -om van, nyilván valami vezérlésátadást kell oda tenni. De ki határozza azt meg hogy ez pontosan 4 byte, és mi az a "Soft ISR ad." ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #426 on: 2013.April.14. 14:00:43 »
Attól függ akarsz-e EXOS-t használni.
A békés megoldás, ha a 3D-3Eh címre leteszed a saját rutinod címét, amit a saját megszakítás kezelése után meghív. (Ez a Soft ISR)
Játékokban, demókban, ahol fontos tényező a végrehajtási idő, megszoktak szabadulni az EXOS megszakításkezelésétől, egy JP utasítást téve 38H-ra, ami a saját rutinra ugrik.
Ugyanez megoldható IM2-re áttéréssel is.
Ekkor használhatóak EXOS hívások, de egyes esetekben gond lehet, pl az EXDOS nem veszi észre a lemezcserét, és írásnál tönkreteszi a betett lemezt.
Ha egyáltalán nem kell EXOS akkor 38H-tól jöhet a saját rutin, felülírva az EXOS közös funkcióhívás/megszakításkezelő rutinját.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #427 on: 2013.April.14. 15:13:17 »
Ha a Soft ISR terület az a user megszakítás rutin, akkor miért van ott JP 0000 (epdos alatt néztem), ez sem egy cím, ami a user megszakítást jelöli, hanem konkrétan lefuttatott kód ? Tehát a 38h és a 3ch az mindkettő egy fix cím, csak az első 4 byte kódot tartalmazhat, míg a második csak hármat, illetve az elsőt a z80 hívja meg hardware megszakítaskor, a másodikat (3ch) pedig az exos hívja meg ? De nem olvas ki onnan semmit, csak ráugrik a 3ch -ra ? És akkor a JP 0000 az mit csinál ? Miért nem száll el ?

És ha úgy vannak, ahogy fent írom, akkor mi ez ? :

 0BFED/Eh - USER_ISR Address of user's interrupt service
 routine, must be in page 0 and can
 be 0000h for no routine.
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #428 on: 2013.April.14. 15:35:21 »
Quote from: Z80System
0BFED/Eh - USER_ISR Address of user's interrupt service
 routine, must be in page 0 and can
 be 0000h for no routine.
Jaj igaz :oops:
Ez az amit a megszakítási rutinban hív! (Csak EXOS 2.1-től van ilyen.)
A másikat akkor hívja (ha nem 0), ha szoftveres dolog történik, pl STOP gomb lenyomása, vagy hálózati adat érkezése.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #429 on: 2013.April.14. 15:45:31 »
Ok, akkor tehát a 38h az a hardware megszakítási cím (mindenféle hw dolgok kezdemenyezik), 3ch pedig a szoftver megszakítási cím, amit a szoftver megszakítások kezdeményeznek, egyiknél 4 byte -os kódunk lehet, másiknál 3 byte -os kódunk ... rendben.

De akkor miért JP 0000 kód van a 3ch -n ? Mi van a 0000 -án, hogy mer oda ugrani ?

A másik hogy ilyen szoftver megszakításokból én exos kompatibilis módon nem is részesülhetek, csak a hardware megszakításokból a 0BFED/Eh által ? Mindkettőhöz kéne lennie az exos -nak egy olyan változója, melyen keresztül az alkalmazói program is kezelheti mindkét típusú megszakítást, nem ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #430 on: 2013.April.14. 15:58:56 »
Mind két esetben 0 érték azt jelenti, hogy nincs ilyen rutin, ilyenkor természetesen nem is hívja meg.

Ha BASIC alatt nézed meg, akkor ott már JP 00FFh van a soft isr címen.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #431 on: 2013.April.14. 16:03:54 »
Mind a 38h és 3ch megszakítások esetében a z80 fogja meghívni az iménti címeket, nem ? HW megszakítás hatására z80 hívja 38h -t, és RST mittudoménhány esetén szintén a z80 fogja hívni 3ch -t ... vagyis senki semilyen nullát nem néz ... nem ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #432 on: 2013.April.14. 16:11:22 »
A 38h-t hívja csak a Z80, ez a hardveres.
3Ch-t az EXOS hívja.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #433 on: 2013.April.14. 16:20:21 »
Ha az exos ránéz a 3ch -n lévő JP utasítás operanduszára, hogy az nulla- e, és csak akkor ugrik, ha nem nulla, akkor minek oda a 3ch -n lévő JP utasítás kód ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #434 on: 2013.April.14. 16:25:51 »
Quote from: Z80System
Ha az exos ránéz a 3ch -n lévő JP utasítás operanduszára, hogy az nulla- e, és csak akkor ugrik, ha nem nulla, akkor minek oda a 3ch -n lévő JP utasítás kód ?
Mert így egy fix címet lehet hívni, azaz a 3Ch-t.