; Programme d'exemple d'utilisation ; des canaux DMA son du CPC+ ; ; Zik pour Quasar CPC 20 (2002) ; Org &8000 ; o| vous voulez en dehors de &4000-&7fff Limit &80ff Nolist ; pour Maxam DMASAR0 equ &6c00 ; adresse AY-liste DMASAR1 equ &6c04 DMASAR2 equ &6c08 DMAPPR0 equ &6c02 ; adresse unit{ de pause DMAPPR1 equ &6c06 DMAPPR2 equ &6c0a DCSR equ &6c0f ; ITraster / ITDMA2 / ITDMA1 / ITDMA0 / ; x / DMA2 / DMA1 / DMA0 call delock ; d{verrouille l'ASIC di ld bc,&7fb8 ; Connexion page Asic (&4000-&7fff) out (c),c call exemple1 call &bb18 ; attend une touche call exemple2 ld bc,&7fa0 ; Deconnexion page Asic out (c),c ei ret Exemple1 xor a ld (DMAPPR2),a ld hl,Ay_ListeA ld (DMASAR2),hl ld a,%100 ; lance DMA2 ld (DCSR),a ret Exemple2 ld a,17 ld (DMAPPR2),a ld hl,Ay_ListeB ld (DMASAR2),hl ld a,%100 ; lance DMA2 ld (DCSR),a ret ;# D{verrouille l'ASIC ;##################### Delock di ld a,17 ld hl,asic Loop ld b,&bd outi dec a jr nz,loop ei ret Asic db 255,0,255,119,179,81,168,212,98,57,156,70,43,21,138,205,238 ;# D{finition des AY-Listes ;########################## Org &8100 ; o| vous voulez en RAM centrale ; doit etre une adresse paire Limit &81ff ; ne t'{loigne pas trop mon petit... ; 1er exemple ; g{n{ration de formes d'onde Ay_ListeA dw &073f,&0000,&0100 dw &2040,&080f,&1012,&0800,&100f,&4001 dw &2040,&0808,&1011,&0800,&1010,&4001 dw &2080,&080f,&1011,&0800,&100e,&4001 dw &2080,&0808,&1010,&0800,&100f,&4001 dw &2060,&080f,&101b,&0800,&101b,&4001 dw &4020 ; 2}me exemple ; sons classiques Ay_ListeB dw &073f dw &080f,&090f dw &0000+159,&0100,&0200+213,&0300 dw &073c,&1040,&073f,&1050 dw &2002 dw &0000+142,&0100,&0200+358-256,&0301 dw &073c,&1040,&073f,&1050 dw &4001 dw &2002 dw &0000+127,&0100,&0200+319-256,&0301 dw &073c,&1040,&073f,&1050 dw &4001 dw &2003 dw &0000+119,&0100,&0200+190,&0300 dw &073c,&1040,&073f,&1050 dw &4001 dw &4020