Welcome, Guest. Please login or register.


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

Offline endi

  • EP addict
  • *
  • Posts: 7305
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 39.0.2171.95 Chrome 39.0.2171.95
    • View Profile
    • Honlapom
Re: Assembly programozás
« Reply #825 on: 2015.January.02. 23:12:25 »
szoftveres DMA :) ez jól hangzik
Vigyázat! Szektás vagyok! :)

Offline geco

  • EP addict
  • *
  • Posts: 6354
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 31.0 Firefox 31.0
    • View Profile
Re: Assembly programozás
« Reply #826 on: 2015.January.03. 14:10:57 »
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.
Csak lustaságom miatt néztem a ZIP-et, azt a leggyorsabb letesztelni, hogy mennyit tömörítene az adaton , hát láttam, szinte semmit :)

Offline geco

  • EP addict
  • *
  • Posts: 6354
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 31.0 Firefox 31.0
    • View Profile
Re: Assembly programozás
« Reply #827 on: 2015.January.03. 14:16:29 »
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:

Akkor szerinted nem is érdemes a 8 bites lejátszást erőltetni?
Emulátoron nagyon jól szól a 8bites lejátszás :)
Arra gondoltam, hogy lehetne egy Wav-player belőle.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 14089
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 34.0 Firefox 34.0
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #828 on: 2015.January.03. 14:28:23 »
A Dave-ből mindenképpen 2x6 bit jön ki, és megy a D/A ellenállásokra :oops:
Wav lejátszó ettől még jól jöhet.
Esetleg meg lehetne építeni végre a külső 8 bites D/A kártyát, amit a DTM is támogat.

Offline geco

  • EP addict
  • *
  • Posts: 6354
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 31.0 Firefox 31.0
    • View Profile
Re: Assembly programozás
« Reply #829 on: 2015.January.03. 14:36:25 »
A Dave-ből mindenképpen 2x6 bit jön ki, és megy a D/A ellenállásokra :oops:
De ez csak akkor igaz, ha D/A módban használjuk a 0-ás csatornát , nem?
Tehát ha a pl az összes hangcsatornának a frekvenciáját 0001h-ra állítjuk, akkor egy oldalra már 3x6, és a másik oldalra már 3x6 bit megy, és egy kis trükközéssel, a zajcstorna bevonásával már 2x4x6, nem?
Legalábbis én így gondoltam a bites lejátszóban a D/A kihagyásával.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 14089
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 34.0 Firefox 34.0
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #830 on: 2015.January.03. 14:48:19 »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 34.0 Firefox 34.0
    • View Profile
Re: Assembly programozás
« Reply #831 on: 2015.January.03. 14:55:05 »
Akkor szerinted nem is érdemes a 8 bites lejátszást erőltetni?

Annak is van értelme, csak én az SNDPLAY-ben nem próbálkoztam vele, mert elsősorban az volt a cél, hogy alapkiépítésű (128K-s) gépen viszonylag hosszú hangot lehessen lejátszani többé-kevésbé elfogadható minőségen.

Offline geco

  • EP addict
  • *
  • Posts: 6354
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 31.0 Firefox 31.0
    • View Profile
Re: Assembly programozás
« Reply #832 on: 2015.January.03. 14:57:14 »
Nem, fizikailag jön ki ennyi, lásd bal felső sarok a rajzon.
Belsőleg mixelheti le 6 bitre.
Akkor parasztvakítás a 2x4 6bites hangerő, mert ha az egyik oldalon van 10, 10, 30, 63 hangerő beállítva, akkor a Dave-ből nagyjából 28-as hangerő jön ki, vagy ki tudja hogy számol pontosan, de ez a lényege, nem?
Tehát ez kb olyan, mintha 2x4 4 bites hangerőnk lenne?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 34.0 Firefox 34.0
    • View Profile
Re: Assembly programozás
« Reply #833 on: 2015.January.03. 14:58:19 »
Lehetne egyébként olyan módosított/továbbfejlesztett epsndconv és sndplay verziót készíteni, ami a tömörített formátumot 7 helyett 8 bitre dekódolja. Ez a halkabb részeknél javíthatna a minőségen.

Offline geco

  • EP addict
  • *
  • Posts: 6354
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 31.0 Firefox 31.0
    • View Profile
Re: Assembly programozás
« Reply #834 on: 2015.January.03. 15:03:11 »
Annak is van értelme, csak én az SNDPLAY-ben nem próbálkoztam vele, mert elsősorban az volt a cél, hogy alapkiépítésű (128K-s) gépen viszonylag hosszú hangot lehessen lejátszani többé-kevésbé elfogadható minőségen.
Ezt teljes sikerrel , de szerintem a viszonylag elfogadhatót is embere válogatja, én úgy emléxem, hogy teljesen jó minőségű volt, amikor teszteltem, ez a nagyfrekvenciás 8bites memóriazabáló lejátszás akkor ötlött fejembe, amikor elkezdtem szórakozni egy speccy program átírásával (le is akadtam a zenénél :D ), és a beeperes zenét akartam Dave-esíteni, ez meg is történt, aztán meg arra gondoltam, hogy Samplékat játszok le a zene alapján, akkor jött ez a 8bites ötlet.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 34.0 Firefox 34.0
    • View Profile
Re: Assembly programozás
« Reply #835 on: 2015.January.03. 15:03:54 »
Akkor parasztvakítás a 2x4 6bites hangerő

Nem, mert igaz ugyan, hogy a fizikai kimenet csak 6 bites, de a 4 csatorna időosztásos rendszerben működik, így több csatorna használatával lehetséges 6 bitnél nagyobb felbontást elérni. Azonban valódi gépen az analóg kimenetet megvalósító ellenállás hálózat meglehetősen rossz minőségű (pontatlan), ami jelentős torzítást eredményezhet, például előfordulhat, hogy az 1Fh szint magasabb, mint a 20h.

Offline geco

  • EP addict
  • *
  • Posts: 6354
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 31.0 Firefox 31.0
    • View Profile
Re: Assembly programozás
« Reply #836 on: 2015.January.03. 15:06:41 »
Lehetne egyébként olyan módosított/továbbfejlesztett epsndconv és sndplay verziót készíteni, ami a tömörített formátumot 7 helyett 8 bitre dekódolja. Ez a halkabb részeknél javíthatna a minőségen.
Én támogatom :) Sőt, esetleg akkor meg lehetne csinálni azt is, hogy támogassa a tömörítetlen Wav fájlok lejátszását is?
A kicsomagolás mennyi időt vesz igénybe ?
« Last Edit: 2015.January.03. 15:18:55 by geco »

Offline geco

  • EP addict
  • *
  • Posts: 6354
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 31.0 Firefox 31.0
    • View Profile
Re: Assembly programozás
« Reply #837 on: 2015.January.03. 15:10:05 »
Nem, mert igaz ugyan, hogy a fizikai kimenet csak 6 bites, de a 4 csatorna időosztásos rendszerben működik, így több csatorna használatával lehetséges 6 bitnél nagyobb felbontást elérni. Azonban valódi gépen az analóg kimenetet megvalósító ellenállás hálózat meglehetősen rossz minőségű (pontatlan), ami jelentős torzítást eredményezhet, például előfordulhat, hogy az 1Fh szint magasabb, mint a 20h.
értem, köszi a leírást, akkor tényleg van értelme a 8bites próbálkozásnak, csak vason nem szól olyan jól ,mint emulátoron, azért kíváncsi lennék, hogy EP-n hogy szól, sajnos lusta vagyok összeszerelni a jó öreg EP konfigom :oops:

Offline IstvanV

  • EP addict
  • *
  • Posts: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 34.0 Firefox 34.0
    • View Profile
Re: Assembly programozás
« Reply #838 on: 2015.January.03. 15:26:31 »
Én támogatom :) Sőt, esetleg akkor meg lehetne csinálni azt is, hogy támogassa a tömörítetlen Wav fájlok lejátszását is?
A kicsomagolás mennyi időt vesz igénybe ?
4bites esetén 2 bájt kicsomagolása kb 51 órajelciklus , és ezzel majd feleződik a fájl mérete?

Ez a teljes dekódoló rutin (a csak a lejátszás előtt futó táblázat generálás nélkül) a 3 bites formátumhoz:

Code: ZiLOG Z80 Assembler
  1. decodeBlock_ADPCM3:
  2.         exx
  3.         inc   l
  4.         call  z, readBlock
  5.         ld    a, (hl)
  6.         exx
  7.         rlca
  8.         rlca
  9.         rlca
  10.         ld    h, a
  11.         and   0f8h
  12.         ld    l, a
  13.         xor   h
  14.         add   a, high diffTable
  15.         ld    h, a
  16.         ld    de, decodeTable
  17.         ld    bc, 8
  18.         ldir
  19.  
  20. decodeSamples_ADPCM3:
  21.         ld    h, d
  22.         ld    b, 7
  23.         ld    c, ixl
  24. .l1:    exx
  25.         inc   l
  26.         call  z, readBlock
  27.         ld    a, (hl)
  28.         exx
  29.         ld    d, a
  30.         rlca                            ; sample 0
  31.         rlca
  32.         rlca
  33.         and   b
  34.         ld    l, a
  35.         ld    a, (hl)
  36.         add   a, c
  37.         ld    c, a
  38.         exx
  39.         ld    (de), a
  40.         inc   e
  41.         exx
  42.         ld    a, d
  43.         rrca                            ; sample 1
  44.         rrca
  45.         and   b
  46.         ld    l, a
  47.         ld    a, (hl)
  48.         add   a, c
  49.         ld    c, a
  50.         exx
  51.         ld    (de), a
  52.         inc   e
  53.         inc   l
  54.         call  z, readBlock
  55.         ld    a, (hl)
  56.         exx
  57.         rlca                            ; sample 2
  58.         ld    e, a
  59.         ld    a, d
  60.         rla
  61.         and   b
  62.         ld    l, a
  63.         ld    a, (hl)
  64.         add   a, c
  65.         ld    c, a
  66.         exx
  67.         ld    (de), a
  68.         inc   e
  69.         exx
  70.         ld    a, e
  71.         rlca                            ; sample 3
  72.         rlca
  73.         rlca
  74.         and   b
  75.         ld    l, a
  76.         ld    a, (hl)
  77.         add   a, c
  78.         ld    c, a
  79.         exx
  80.         ld    (de), a
  81.         inc   e
  82.         exx
  83.         ld    a, e
  84.         rrca                            ; sample 4
  85.         rrca
  86.         ld    e, a
  87.         and   b
  88.         ld    l, a
  89.         ld    a, (hl)
  90.         add   a, c
  91.         ld    c, a
  92.         exx
  93.         ld    (de), a
  94.         inc   e
  95.         inc   l
  96.         call  z, readBlock
  97.         ld    a, (hl)
  98.         exx
  99.         ld    d, a
  100.         sla   e                         ; sample 5
  101.         rla
  102.         rla
  103.         rla
  104.         and   b
  105.         ld    l, a
  106.         ld    a, (hl)
  107.         add   a, c
  108.         ld    c, a
  109.         exx
  110.         ld    (de), a
  111.         inc   e
  112.         exx
  113.         ld    a, d
  114.         rrca                            ; sample 6
  115.         rrca
  116.         rrca
  117.         and   b
  118.         ld    l, a
  119.         ld    a, (hl)
  120.         add   a, c
  121.         ld    c, a
  122.         exx
  123.         ld    (de), a
  124.         inc   e
  125.         exx
  126.         ld    a, d
  127.         and   b                         ; sample 7
  128.         ld    l, a
  129.         ld    a, (hl)
  130.         add   a, c
  131.         ld    c, a
  132.         exx
  133.         ld    (de), a
  134.         inc   e
  135.         ld    a, e
  136.         exx
  137. .l2:    and   0ffh                      ; * block size - 1
  138.         jp    nz, .l1
  139.         ld    ixl, c
  140.         ret

A decodeBlock minden blokknál (általában 8, 16, 32, vagy 64 hangminta, kisebb blokk méret jobb minőségű, de nagyobb file-t eredményez, és lassabb a dekódolása) egyszer fut le, a többi pedig 8 hangminta lejátszása. Nem számoltam, pontosan hány ciklus átlagosan egy hangminta, de úgy látom kb. 70 lehet a blokk fejléc nélkül.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 14089
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 34.0 Firefox 34.0
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #839 on: 2015.January.03. 15:31:42 »
Nem, mert igaz ugyan, hogy a fizikai kimenet csak 6 bites, de a 4 csatorna időosztásos rendszerben működik, így több csatorna használatával lehetséges 6 bitnél nagyobb felbontást elérni.
Trükkös! És ez milyen frekvenciával történik, Dave órajellel?
Elvileg ha a 0-2 csatorna fix 0-ás, az 1-3 meg fix 63-as hangerőre van beállítva, akkor egy mérhető négyszögjel lesz, igaz?

Quote
Azonban valódi gépen az analóg kimenetet megvalósító ellenállás hálózat meglehetősen rossz minőségű (pontatlan), ami jelentős torzítást eredményezhet, például előfordulhat, hogy az 1Fh szint magasabb, mint a 20h.
Elvileg ide lehetne valami jobb D/A-t berakni, meg esetleg az analóg erősítőrészt is felújítani.