Welcome, Guest. Please login or register.


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

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #810 on: 2015.January.01. 14:09:22 »
Érdemes ezt folytatni?
Négy megás gép javasolt az elindításához.
Majd később elmondom a paramétereket.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #811 on: 2015.January.01. 14:24:58 »
Igen. Mi lesz ebből? :-)

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #812 on: 2015.January.01. 14:38:41 »
Igen. Mi lesz ebből? :-)
Egy 8 bites wav lejátszóra gondoltam, tudom ott az SNDPLAY, de úgy emléxem az 7 bites.
Most ez fix 16 KHz-en játsza le a RAW file-t  arra gondoltam, hogy WAV player lesz belőle, ami 1-25Khz közötti 8 bites WAV lejátszására lesz alkalmas. Ezen a frekvencián 4 megába kb 5 perc adat fér.

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 #813 on: 2015.January.01. 14:42:38 »
betöltöttem a hangot goldwave-be és tényleg 8 bites
de ezt 8 bitesként is játszod le EP-n, valami trükkel? több csatorna együtt? nagyon jó minőségű (jó, persze pc-n a 8 bites lejátszás is minőségjavított)

de amúgy szerintem valami tömörítéssel is lehetne próbálkozni, amit realtime le lehet játszani. pl asszem van olyan ami nem az abszolút, hanem relatív amplitudót tárolja és kevesebb biten. ilyesmit szerintem az EP is le tudna realtime
Vigyázat! Szektás vagyok! :)

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #814 on: 2015.January.01. 15:10:41 »
betöltöttem a hangot goldwave-be és tényleg 8 bites
de ezt 8 bitesként is játszod le EP-n, valami trükkel? több csatorna együtt? nagyon jó minőségű (jó, persze pc-n a 8 bites lejátszás is minőségjavított)

de amúgy szerintem valami tömörítéssel is lehetne próbálkozni, amit realtime le lehet játszani. pl asszem van olyan ami nem az abszolút, hanem relatív amplitudót tárolja és kevesebb biten. ilyesmit szerintem az EP is le tudna realtime
Tudom, én konvertáltam mp3-ból ;)
Igen, 4 csatornán, talán lehetne 8 bites sztereó is, de akkor nem megszakításból menne a lejátszás, és az méretnövekedéssel is járna.
Jó lenne valami tömörítés, és az az eltolásos dolog lehet hatékonyabb is lenne, mint más, zip-et néztem, nagyon minimálisan tömörített, 16KHz-en talán még menne is a kitömörítése on the fly, bár nem ismerem az eljárást.

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 #815 on: 2015.January.01. 15:19:33 »
de hogy tolod ki 4 csatira a 8 bitet? arra gondolok hogy ez ügye több out utasítás, és nem egyszerre történik ügyebár. ez nem okoz gondot? így hallásra persze nem
Vigyázat! Szektás vagyok! :)

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #816 on: 2015.January.01. 15:37:07 »
de hogy tolod ki 4 csatira a 8 bitet? arra gondolok hogy ez ügye több out utasítás, és nem egyszerre történik ügyebár. ez nem okoz gondot? így hallásra persze nem
77 órajelciklus alatt történik meg a 4 out utasítás.
így:
Code: [Select]
        ld     c,(hl)               ;sample érték
        inc   hl
        ld     b,high regval0
        ld     a,(bc)
        out   (0a9h),a
        inc   b
        ld     a,(bc)
        out   (0aah),a
        inc   b
        ld     a,(bc)
        out   (0adh),a
        inc   b
        ld     a,(bc)
        out   (0aeh),a

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 #817 on: 2015.January.01. 15:50:22 »
hát ezt nem teljesen értem
mi az a high regval és mi van a (bc)-n?
Vigyázat! Szektás vagyok! :)

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #818 on: 2015.January.01. 16:04:53 »
hát ezt nem teljesen értem
mi az a high regval és mi van a (bc)-n?
Minden regiszternek megvan a maga 256-os (0-3fh értékkel feltöltve, az egyes táblázatok el vannak tolva egymástól 1-gyel) táblázata egymás után tárolva, és a sample 0-ffh értékének megfelően onnan veszi ki a megfelelő értéket, ami a portra kerül.

Hivatalosan így nézne ki a dolog:


Sample érték:  01 03 08 15 81
port1                 01 01 02 04 21
port2                00 01 02 04 20
port3                00 01 02 04 20
port4                00 00 02 03 20
valójában kicsit eltér 00-03h sample értékig 00h kerül a portokra, és csak onnantól kezdenek el nőni az értékek.

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 #819 on: 2015.January.01. 16:07:35 »
aha tök jó
bedigizve megnézem a hullámformát :) lehet hogy látszana az a pár órajel eltérés
Vigyázat! Szektás vagyok! :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #820 on: 2015.January.02. 15:35:50 »
Jó lenne valami tömörítés, és az az eltolásos dolog lehet hatékonyabb is lenne, mint más, zip-et néztem, nagyon minimálisan tömörített, 16KHz-en talán még menne is a kitömörítése on the fly, bár nem ismerem az eljárást.

A zip (deflate) tömörítése hasonló az epcompress -m0 algoritmushoz, és EP-n hang lejátszáshoz valószínűleg túl lassú lenne.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #821 on: 2015.January.02. 15:46:46 »
de amúgy szerintem valami tömörítéssel is lehetne próbálkozni, amit realtime le lehet játszani. pl asszem van olyan ami nem az abszolút, hanem relatív amplitudót tárolja és kevesebb biten. ilyesmit szerintem az EP is le tudna realtime

Az epsndconv/sndplay ilyen megoldást használ, egy tömörített hangminta 2, 3, vagy 4 bites lehet, és az előző tömörítetlen 7 bites hangmintához képesti különbséget tárolja 256 lehetséges kódolás valamelyikével. Ezeket a konvertáláskor választható méretű blokkok előtti 1 byte választja, tehát például a 3 bites formátum 16 blokk mérettel gyakorlatilag átlagosan 3.5 bites. A kódoláshoz az epsndconv generálja a 256 táblázatot (elvileg az adott file-ra optimalizálva), és ezeket tömörítve tárolja a fejlécben.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #822 on: 2015.January.02. 15:58:50 »
Egy 8 bites wav lejátszóra gondoltam, tudom ott az SNDPLAY, de úgy emléxem az 7 bites.

Az sndplay csak 7 bites, mert nem használ mono lejátszáshoz két csatornát (illetve mindkét oldalon pontosan ugyanaz a kimenet), és a gyakorlatban elsősorban a kezdetleges veszteséges tömörítés, az alacsony mintavételezési frekvencia, és az EP rossz minőségű analóg kimenete korlátozza a minőséget. Az IRQ rutin így néz ki egy és két csatornás lejátszáshoz:

Code: ZiLOG Z80 Assembler
  1. irqCodeBegin:
  2.         phase 00038h
  3.  
  4. irqRoutine:
  5.         ex    af, af'
  6.         ld    a, (iy)
  7.         rrca
  8.         out   (0a8h), a
  9.   if LEFT_CHANNEL_ONLY == 0
  10.         out   (0ach), a
  11.   endif
  12.         adc   a, 0
  13.         out   (0abh), a
  14.   if LEFT_CHANNEL_ONLY == 0
  15.         out   (0afh), a
  16.   endif
  17.         ld    a, 003h
  18.         inc   iyl
  19.         jr    z, .l1
  20.         out   (0b4h), a
  21.         ex    af, af'
  22.         ei
  23.         ret
  24. .l1:    inc   iyh
  25.         out   (0b4h), a
  26.         and   iyh
  27.         or    high audioBuffer
  28.         ld    iyh, a
  29.         ex    af, af'
  30.         ei
  31.         ret
  32.  
  33.         dephase
  34. irqCodeEnd:
  35.  
  36. irqCode2Begin:
  37.         phase 00038h
  38.  
  39.         ex    af, af'
  40.         ld    a, (iy - 128)
  41.         rrca
  42.         out   (0a8h), a
  43.         adc   a, 0
  44.         out   (0abh), a
  45.         ld    a, (iy)
  46.         rrca
  47.         out   (0ach), a
  48.         adc   a, 0
  49.         out   (0afh), a
  50.         ld    a, 003h
  51.         inc   iyl
  52.         jr    z, .l1
  53.         out   (0b4h), a
  54.         ex    af, af'
  55.         ei
  56.         ret
  57. .l1:    ld    iyl, 080h
  58.         inc   iyh
  59.         out   (0b4h), a
  60.         and   iyh
  61.         or    high audioBuffer
  62.         ld    iyh, a
  63.         ex    af, af'
  64.         ei
  65.         ret
  66.  
  67.         dephase
  68. irqCode2End:

Az IY egy 1024 byte-os pufferre mutat, ahova a főprogram a dekódolt hangmintákat írja.

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 #823 on: 2015.January.02. 16:40:16 »
Olyat nem lenne érdemes csinálni, hogy a megszak rutinban csak egy egyszerű lejátszás megy egy kis bufferből, és egy 50hz-s megszakban pedig ezt a buffert töltjük fel. Így nem kell a gyors megszakba bonyolultabb kódot tenni, hatékonyabb lehet az 50hz-s rutin ami kitömörít és feltölti a buffert.
Vigyázat! Szektás vagyok! :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #824 on: 2015.January.02. 23:10:31 »
Olyat nem lenne érdemes csinálni, hogy a megszak rutinban csak egy egyszerű lejátszás megy egy kis bufferből

Az SNDPLAY így működik, amint az a fenti kódon is látható. Azonban a puffer feltöltését nem 50 Hz-es megszakítás időzíti, hanem a főprogram a puffer olvasási pozíció felső byte-ját (IYH regiszter) figyeli, és ha az írási pozíció növelés után ezzel egyenlő lesz, akkor vár, amíg újra van szabad hely. Tehát a megszakítási rutin gyakorlatilag "szoftveres DMA" lejátszást valósít meg. Így a főprogram időzítése nem fontos, csak azt kell elkerülni, hogy a pufferből elfogyjon a lejátszható hangminta.