Welcome, Guest. Please login or register.


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

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #525 on: 2013.November.01. 14:29:27 »
Quote
Az "1.75 ciklus" az valószínűleg 1.75 us, azaz 7 ciklus (T-state) 4 Mhz-es órajelen.

Oks, lehet marhaságokat irkálok össze, akkor vegyünk konkrétan egy 1.75 -öst:

LD r, (HL)

Operation: r ← (HL)
Op Code: LD
Operands: r, (HL)
Description: The 8-bit contents of memory location (HL) are loaded to register r,
where r identifies register A, B, C, D, E, H, or L, assembled as follows in
the object code:
Register r
A 111
B 000
C 001
D 010
E 011
H 100
L 101

Condition Bits Affected: None

M Cycles : 2
T States : 7 (4, 3)
4 MHz E.T. : 1.75

Az "E.T." az az "estimated time" lehet, nem ?

Kérdés, akkor ezekből az adatokból hogyan számolok én egy olyan "abszolút időt" amivel abszolút értékben jól össze tudom hasonlítani 2 utasítás idejét ?

Mert ha csak az E.T. értékkel simán összehasonlítom őket, akkor abból az jön ki, amit előbb írtam: az EXX+ld a,b az hosszabb idő, mint az ld a,(hl).

Márpedig gyanús, hogy ez durván nem így van ...
« Last Edit: 2013.November.01. 14:32:45 by Z80System »
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #526 on: 2013.November.01. 14:36:15 »
Quote from: Z80System
Mert ha csak az E.T. értékkel simán összehasonlítom őket, akkor abból az jön ki, amit előbb írtam: az EXX+ld a,b az hosszabb idő, mint az ld a,(hl). Márpedig gyanús, hogy ez durván nem így van ...
Miért ne lenne így ? Az EXX + LD A, B 2 utasítás olvasás (2 * 4 ciklus = 8 ciklus), az LD A, (HL) pedig egy utasítás és egy adat olvasás (4 + 3 = 7 ciklus). Az EP az alapértelmezett beállításokkal az utasítás olvasási (M1) műveleteknél vár 1 ciklust, ezért így az utasítások időtartama 10 (2 * 5), illetve 8 (5 + 3) ciklus lesz; a várakozás azonban letiltható. Video RAM-ban pedig átlagosan ~18 (2 * ~9) és ~13.5 (~9 + ~4.5) ciklus alatt futnak le ezek az utasítások.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #527 on: 2013.November.01. 14:47:59 »
Quote
Miért ne lenne így ? Az EXX + LD A, B 2 utasítás olvasás (2 * 4 ciklus = 8 ciklus), az LD A, (HL) pedig egy utasítás és egy adat olvasás (4 + 3 = 7 ciklus). Az EP az alapértelmezett beállításokkal az otasítás olvasási (M1) műveleteknél vár 1 ciklust, ezért így az utasítások időtartama 10 (2 * 5), illetve 8 (5 + 3) ciklus lesz; a várakozás azonban letiltható. Video RAM-ban pedig ~18 (2 * ~9) és ~13.5 (~9 + ~4.5) ciklus.
Oks, akkor tehát egyrészt szerinted a megadott "4 MHz E.T." értékeimmel igenis összehasonlíthatom az utasításaimat, és azok az EP kiépítésében is viszonylag jól tükrözik az utasítások abszolút idejeit ha nem video ramban fut a kód (és persze hogy nem), pláne ha még az EP "direkt" lassító várakoztatásait is kikapcsoljuk?

(Mert a szent tervezők szentül meg voltak győződve, hogy ha nem tesznek kéziféket a rendszerbe csontig behúzva, akkor a z80 -ban lévő lóerők egyszerűen levetik a gépet az asztalról, így az nem lesz stabil ... :))

Másik meg, hogy hivatkozol itt utasítás és adatolvasási ciklusokra, ezeknek idejei mindíg 4 és 3 órajel, akkor is ha akárhány bájtos az utasítás (hisz sokbájtos utasítások is vannak) vagy az adat (hisz van 8 és 16 bit adat is) ?
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #528 on: 2013.November.01. 14:54:08 »
A legegyszerűbb, ha letiltod a várakozást (OUT 191, 12), és kerülöd a video RAM használatát, ha lehetséges. Ilyenkor az utasítások a Z80 dokumentációban megadott "T states" ciklus alatt futnak le (NOP = 4 ciklus, JP = 10 ciklus, stb.).

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #529 on: 2013.November.01. 15:26:27 »
Quote
A legegyszerűbb, ha letiltod a várakozást (OUT 191, 12), és kerülöd a video RAM használatát, ha lehetséges. Ilyenkor az utasítások a Z80 dokumentációban megadott "T states" ciklus alatt futnak le (NOP = 4 ciklus, JP = 10 ciklus, stb.).

Hmmm ... akkor ha ilyet olvasok mondjuk az

LD (IY+d), n

utasításnál:

T States : 19 (4, 4, 3, 5, 3)

akkor ez megválaszolja a korábbi kérdésemet,

vagyis ezekből úgy tűnik, hogy egy bonyolult utasításnál akkor lehet több az olvasási ciklusokból ?
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #530 on: 2013.November.01. 17:24:38 »
Le tudja valaki írni pár szóban, hogy hogyan kell digitális hangot kelteni az EP -n ?

Valami olyan szintű leírás kéne, hogy "kapcsold ezt a portot erre, annak a portnak meg amazt a bitjét amarra, és akkor írd a sample -t ide meg ide".

Ugyanez kéne a nagyfrekis megszakítás bekapcsolásához is. Hogy mit kell állítani, és hova, hogy mondjuk legyen egy 5KHz -es megszakításom.
Z80 System

Offline Ferro73

  • EP lover
  • *
  • Posts: 967
  • Country: hu
Re: Assembly programozás
« Reply #531 on: 2013.November.01. 19:02:00 »
Engem olyan Link érdekelne ahol Z80 rutinok forrás kódjai található. Pl sorrendbe rendező; Hex2Dec; hex2ASCII; (nn)=HL*DE....
A hálón nem találom de lehet rosszul keresem. Emlékszem volt ilyen.
Nekem elveszett  
Esetleg a linkekhez is belehetne tenni. Vagy valahol az oldalon is lehetne gyűjteni a legjobbakat.
Előre is köszönöm

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #532 on: 2013.November.01. 19:14:29 »
Ezekben az éppen most feltöltött programokban található néhány egyszerű matematikai és grafikai rutin, amelyeknek talán valamennyire hasznát lehet venni:
- 8 * 16 -> 16 bites szorzás (előjel nélkül)
- 16 * 16 -> 32 bites szorzás (előjeles és előjel nélküli)
- 16 bites előjeles sin()/cos() szorzás (a szög felbontása 1.40625 fok)
- 2 színű képernyőn vonal húzása és feltöltés (FILL)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #533 on: 2013.November.01. 20:54:20 »
Annyi lenne a digi hang keltés, hogy a 0xa7 port b3,b4 -ét egybe állítom, aztán meg írom a 0xa8 és 0xac port alsó hat bitjét ?
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #534 on: 2013.November.01. 21:17:17 »
Miért van a 0xb4 portnak 4 külön kezelhető megszakítása ?

A port bitenként értelmezett:
b0 A hanggenerátor által adott megszakítás engedélyezése. (1 érték által)
b1 A hanggenerátor megszakítás tároló törlése.
b2 Az 1 Hz-es megszakítás engedélyezése.
b3 Az 1 Hz-es megszakítás tároló törlése.
b4 A video-megszakítás engedélyezése.
b5 A video-megszakítás tároló törlése.
b6 A soros vonal megszakításának engedélyezése.
b7 A soros vonal megszakítás tárolójának törlése.

Hiszen az 1Hz,50Hz,1KHz és valami csatornafüggő megszak is (gondolom az kell a 4KHz -hez) ugyanúgy gondolom egy forrásnak számít ...

Tehát elég volna egy video (gondolom ami jon az LPT -ből), egy audio (gondolom az előbbi 4 típus valamelyike) és egy soros vonal megszak bit. Miért van az 1Hz külön ? Az miért külön forrás ?

És amikor én 4KHz megszakot akarok, akkor azzal lefoglalom az egyik hanggenerátor csatornámat, mert kell a megszak frekibeállításához (nekem most nem lenne gáz, csak csodálkozok, hogy mér) ?

Mindenesetre még nem jöttem rá, hogy kell bekapcsolni a 4Khz megszakot.
« Last Edit: 2013.November.01. 21:22:45 by Z80System »
Z80 System

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #535 on: 2013.November.01. 21:44:46 »
Az 1Hz-es az órához kell, ha jól emléx.
Beállítod az A7-es portot, 40-re, vagy 60h-ra, attól függően, hogy melyik hanngenerátort szeretnéd időzítésre használni , utána a kiválasztott hanggenerátor két frekiportjban megadod a megfelelő értéket, és tolhatod az a8, ac porton a digi értékeket megszakból (frekvencia = 250,000/(n+1) ) , és a végén
ld a,03h
out (0b4h),a
-val aktiválod a hanggenerátor által gerjesztett megszakítást,

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #536 on: 2013.November.01. 21:55:32 »
Quote
Az 1Hz-es az órához kell, ha jól emléx.
Tehát van még egy külön egy herces megszakítás, ami párhuzamosan tud jönni a hang megszakkal ? Tehát az 1Hz -es hang megszak mellett van még egy külön "nem hang" megszak 1 Hz ?


Quote
Beállítod az A7-es portot, 40-re, vagy 60h-ra, attól függően, hogy melyik hanngenerátort szeretnéd időzítésre használni , utána a kiválasztott hanggenerátor két frekiportjban megadod a megfelelő értéket, és tolhatod az a8, ac porton a digi értékeket megszakból (frekvencia = 250,000/(n+1) ) , és a végén 
ld a,03h 
out (0b4h),a
-val aktiválod a hanggenerátor által gerjesztett megszakítást,

Tanx, kipróba.
Z80 System

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: Assembly programozás
« Reply #537 on: 2013.November.01. 21:57:56 »
ezekről megint előjönnek az emlékek :)

emlékszem, az marhára csalódás volt nekem hogy a megszakítás típusokat is nekem kellett lekezelni kódból
plusz a verem használata...
berak az ember 2 féle megszakítást amik semmit se csinálnak, és elég nagy frekin mennek, máris a proci idő nagy % elveszett
totál gáz :(
Vigyázat! Szektás vagyok! :)

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #538 on: 2013.November.01. 22:13:30 »
Quote from: endi
ezekről megint előjönnek az emlékek :)

emlékszem, az marhára csalódás volt nekem hogy a megszakítás típusokat is nekem kellett lekezelni kódból
plusz a verem használata...
berak az ember 2 féle megszakítást amik semmit se csinálnak, és elég nagy frekin mennek, máris a proci idő nagy % elveszett
totál gáz :(
Hát igen, de valahol még ilyen lehetőséged sincs, mert van a videjó, oszt gatter :D
CPC-n is alapból 300 Hz-es megy, és azon belül vizsgálják, hogy melyikben van a videó megszak.

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #539 on: 2013.November.01. 22:15:30 »
Quote from: Z80System
Tehát van még egy külön egy herces megszakítás, ami párhuzamosan tud jönni a hang megszakkal ? Tehát az 1Hz -es hang megszak mellett van még egy külön "nem hang" megszak 1 Hz ?
Az a hang 1 Hz valójában 1 Khz :D , de ha akarod, akkor pl van a videó 50 Hz -ed mellett egy Dave által generált 50 Hz is, a Net megszakítás nem tudom milyen sűrűn érkezik.