Uživatelské nástroje

Nástroje pro tento web


lnxspectrum:dma

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
Následující verzeObě strany příští revize
lnxspectrum:dma [2014/11/02 11:26] lanexlnxspectrum:dma [2014/11/02 12:29] lanex
Řádek 18: Řádek 18:
  
 Pro přenos větších bloků však DMA nemá v ZX Spectru konkurenta. DMA přenese kopii obrazovky za 41472 taktů, procesor Z80 to zvládne za 110592 taktů, tedy skoro 3x pomaleji. Pro přenos větších bloků však DMA nemá v ZX Spectru konkurenta. DMA přenese kopii obrazovky za 41472 taktů, procesor Z80 to zvládne za 110592 taktů, tedy skoro 3x pomaleji.
 +
 +=== Jak v Z80 Assembleru přenést blok pomocí DMA ===
 +
 +V tomto příkladu přeneseme z adresy 0 do VideoRam 2048 Bajtů včetně barev:
 +<code>
 +; Created by LnxSpectrum emulator (www.ilnx.cz)
 +
 + org 50000
 +
 +start: ld hl,0 ;z adresy 0
 + ld (odkud),hl
 + ld hl,2047 ;o délce 2048 (-1)
 + ld (delka),hl
 + ld hl,16384 ;na adresu Videoram (16384)
 + ld (kam),hl
 + ld hl,dma
 + ld b,len_initblok ;délka inicializačního bloku DMA
 + ld c,11 ;DMA je na portu 11
 + otir ;pošli inicializační blok do DMA,
 + ;tím se i DMA spustí
 +
 +;tady se procesor Z80 zastaví, a nebude provádět žádné instrukce, dokud
 +;DMA nedokončí přenos všech bajtů.
 +
 + ld hl,0 ;opět z adresy 0
 + ld (odkud),hl
 + ld hl,255 ;o délce 256 bajtů (-1)
 + ld (delka),hl
 + ld hl,22528 ;na adresu barev ve videoram (22528)
 + ld (kam),hl
 + ld hl,dma
 + ld b,len_initblok ;délka inicializačního bloku DMA
 + ld c,11 ;DMA je na portu 11
 + otir ;pošli inicializační blok do DMA,
 + ;tím se i DMA spustí
 +
 +;tady se procesor Z80 zastaví, a nebude provádět žádné instrukce, dokud
 +;DMA nedokončí přenos všech bajtů.
 +
 + ret ;hotovo, návrat
 +
 +dma: defb #C3,#C7,#CB,#7D ;inicializační instrukce pro DMA
 +odkud: defw 0 ;adresa bloku urceneho pro prenos
 +delka: defw 0 ;delka prenaseneho bloku
 + defb #14,#10,#C0,#AD ;instrukce pro DMA
 +kam: defw 0 ;adresa kam se ma prenest
 + defb #92,#CF,#B3,#87 ;instrukce pro DMA
 +len_initblok: equ $-dma
 +</code>
lnxspectrum/dma.txt · Poslední úprava: 2018/07/31 10:05 autor: 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki