Welcome, Guest. Please login or register.


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

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #615 on: 2013.November.03. 11:16:39 »
Még egy probléma: a lejátszás így nem tud megállni, legalábbis automatikusan (megszakításból vezérelve) nem. Azaz a hangminták végén megfelelő hosszúságú (legalább 1/50 másodperc) üres helyet kell hagyni, és a főprogramban minden video megszakításnál ellenőrizni, hogy a lejátszás lefutott-e már. A hang szüneteltetéséhez egy csatornán pedig a megfelelő regisztert úgy állítani, hogy 0 (azaz valójában 20h) értékű hangmintára mutasson, és az INC utasítást NOP-al felülírni.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #616 on: 2013.November.03. 11:17:42 »
Quote from: Z80System
A másik megszak javaslatodat visszavontad ?
Igen, mert tévedésből sztereó hangot játszott le két független mono csatorna helyett.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #617 on: 2013.November.03. 11:22:01 »
Quote from: Z80System
másrészt meg a többi is túl nagy megkötésnek tűnik nekem, hogy a max 256 byte lehet a sample, meg ilyenek ...
Ez nem igaz, csak 256 byte-os határon érhetne véget (de tetszőleges címen kezdődhetne), és általában +5 ciklust fogyasztana csatornánként (többet a 256 byte-os határok elérésekor, de ez statisztikailag csak ritkán fordul elő). Az előnye az lenne, hogy a megszakítás automatikusan kezelné a lejátszás megállítását, és végtelenített lejátszást is lehetővé tenne.

Azonban a főprogramban ellenőrzés hatékonyabb a CPU fogyasztás szempontjából.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #618 on: 2013.November.03. 11:24:55 »
Quote
Még egy probléma: a lejátszás így nem tud megállni, legalábbis automatikusan (megszakításból vezérelve) nem. Azaz a hangminták végén megfelelő hosszúságú (legalább 1/50 másodperc) üres helyet kell hagyni, és a főprogramban minden video megszakításnál ellenőrizni, hogy a lejátszás lefutott-e már.
Igen, ez by design van így, pont az optimalizálás jegyében, csak gondolom addig már nem olvastad vissza. Sőt a helyzetet tovább bonyolítja hogy a cuccból most vettem ki a video megszakot, vagyis nem is lesz fix 50 Hz megszak, hanem csak a főprogram tudja majd kezelni ezt körönként, de a főprogramot pedig valójában szabadon lehet majd állítani 1-10 FPS között ...


Quote
A hang szüneteltetéséhez egy csatornán pedig a megfelelő regisztert úgy állítani, hogy 0 (azaz valójában 20h) értékű hangmintára mutasson, és az INC utasítást NOP-al felülírni.

Nem így akarom, mindíg menni fog a hang, folyamatosan, és lesz egy csend hangom, amire mindíg rá lesz váltva, amikor nincs értelmes hang beváltva. Hát ez végülis az amit mondasz, csak az inc -et nem kell piszkálni.

A 20h -ért köszi, én persze 0- ákkal próbáltam volna, és csodálkoztam volna, hogy pattog.
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #619 on: 2013.November.03. 11:29:49 »
Quote
Ez nem igaz, csak 256 byte-os határon érhetne véget (de tetszőleges címen kezdődhetne),
Ezt nem értem ... csak inc c van benne ... az sosem fog kimenni 256 byte -os range -ből. Igen kezdődhetne akárhol, de nem lehetne a hang hosszabb, mint 256 byte. Hisz mikor előszor 0 lenne a c, akkor vége lenne a lejátszásnak. Vagy mit nem értek ?
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #620 on: 2013.November.03. 11:34:00 »
Quote
 Sőt a helyzetet tovább bonyolítja hogy a cuccból most vettem ki a video megszakot,

Hoppá ... most esett le ... mivel a sebességem úgyis meglesz 50 FPS -el, ezért mikor majd épp 10 FPS -sel megyek, nem kell nekem a főprogram loop -ját olyan hosszan befognom, csak arra kell megtanítsam, hogy miután az első frame -ben kész vagyok, a többi frame- ben csak olyanokat csináljon ami nem mozgás ... tehát a hangot nyugodtan tudom még attól kezelni, meg még a színkeverő villogtatást is ...

csuhajj, akkor a legnagyobb probléma elhárult a z80 megszakfigyelés elől.
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #621 on: 2013.November.03. 11:36:23 »
Na, ha jól értem, akkor ez nyert mint leggyorsabb még működő verzio, ha 2 hangot akarok lejátszani, és ráérek a főprogramból lekapcsolni ? :


Code: [Select]
void IRQ() __naked
{
__asm

ex af, af
exx

ld a, #D_Ints+ 0x2
out (0xb4), a

ld a, (de)
out (0xa8), a
inc de

ld a, (hl)
out (0xac), a
inc hl

exx
ex af, af

ei

ret

__endasm;
}


Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #622 on: 2013.November.03. 11:47:57 »
Ezzel akkor úgy szemre 20% -al kell több idő ugyanannak a feladatnak az elvégzésére, ahhoz képest mintha nem lenne hang ... 10% -nak jobban örülnék, de ha ez hát ez ... :)

A lapozást meg úgy fogom megoldani valószínűleg, hogy a cucc az 64K -n fog futni, és két ellenség között a háttér 64K -ból fogok felmásolni grafika és hang adatokat az aktív 64K -ba. Igy akkor lapozás csak a másolás alatt lesz, amit így csak a csillagmozgással kell összeintegráljak ...

Tehát a másolás is kis részekre bontva, valós időben fog megtörténni, két ellenség közötti kis csillagmozgás szünetben ... reményeim szerint.
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #623 on: 2013.November.03. 11:50:38 »
Egyébként a z80 -nal várakozás akkor simán működik a 0xb4 b4(16) olvasással, csak az ex af, af "kioptimalizálása" borította össze nálam a dolgokat.

geco+Zozo+IstvanV rúlz !
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #624 on: 2013.November.03. 11:50:43 »
Quote from: Z80System
Ezt nem értem ... csak inc c van benne ... az sosem fog kimenni 256 byte -os range -ből. Igen kezdődhetne akárhol, de nem lehetne a hang hosszabb, mint 256 byte. Hisz mikor előszor 0 lenne a c, akkor vége lenne a lejátszásnak. Vagy mit nem értek ?
Az INC C után feltételes elágazás következik, és ha a C 0, akkor INC B történhet, illetve a B értékének a tesztelése.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #625 on: 2013.November.03. 11:52:56 »
Quote from: Z80System
Na, ha jól értem, akkor ez nyert mint leggyorsabb még működő verzio, ha 2 hangot akarok lejátszani, és ráérek a főprogramból lekapcsolni ?
Még egy keveset lehetne gyorsítani a megszakítást OUT (C), B utasítással törölve (BC' = 03B4h fixen), de egy regiszterpár elvesztése talán túl nagy ár lenne a 6 ciklus gyorsulásért.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #626 on: 2013.November.03. 11:58:27 »
Quote
Az INC C után feltételes elágazás következik, és ha a C 0, akkor INC B történhet, illetve a B értékének a tesztelése.
Fárasztó lehet elmagyarázni ezeket a trivialitásokat ... Kösz ... :)

Most akkor az lehet még kérdés hogy az inc r + jr cc az nem gyorsabb -e mint az inc hl/inc de, amire érzésre megint azt mondanám, hogy nem, de mostmár megnézem majd az órajeleket ...


Quote
Még egy keveset lehetne gyorsítani a megszakítást OUT (C), B utasítással törölve (BC' = 03B4h fixen), de egy regiszterpár elvesztése talán túl nagy ár lenne a 6 ciklus gyorsulásért.

Oks, egyenlőre nem használom a főprogramban az árnyékot semmire, de majd a végén beleírom, ha így is marad.
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #627 on: 2013.November.03. 12:01:45 »
Quote from: Z80System
Most akkor az lehet még kérdés hogy az inc r + jr cc az nem gyorsabb -e mint az inc hl/inc de, amire érzésre megint azt mondanám, hogy nem, de mostmár megnézem majd az órajeleket ...
Az INC HL természetesen gyorsabb, mint az INC L + JR Z, de ezt már említettem is.

Offline geco

  • EP addict
  • *
  • Posts: 7109
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #628 on: 2013.November.03. 12:05:29 »
Eszembe jutott még egy gyorsítási lehetőség, nem jelent túl sokat, de mégis valami: az inc de-t, és inc hl-t le lehetne cserélni inc e-re, és inc l-re, és a videó megszakítás után csekkolod, hogy elért-e 0f0h közelébe, ha igen, akkor következő 256-os tartományra ugrás, igaz, egy picit helypazarló.
« Last Edit: 2013.November.03. 12:09:15 by geco »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #629 on: 2013.November.03. 12:12:46 »
Quote from: geco
Eszembe jutott még egy gyorsítási lehetőség, nem jelent túl sokat, de mégis valami: az inc de-t, és inc hl-t le lehetne cserélni inc e-re, és inc l-re, és a videó megszakítás után csekkolod, hogy elért-e 0f0h közelébe, ha igen, akkor következő 256-os tartományra ugrás, igaz, egy picit helypazarló.
Ez szerintem nem lenne jó, mert a főprogram nem tudná elég pontos időzítéssel tesztelni a lejátszási pozíciót, ezért akadozna a hang.