;
;        * SAMPLER * AMELIORATION PAR FREDERIC BELLEC 03-90
;                    105 OCTETS RELOGEABLES
;
;        CALL &A000,Type,Adresse,Longueur
;
        ORG     #a000
        CP      3        ;3 param}tres?
        RET     nz       ;si non retour basic
        LD      l,(ix+2) ;        HL=Adresse
        LD      h,(ix+3) ;        DE=longueur
        LD      a,(ix+4) ;        Type
        CP      1        ;si TYPE=1 alors ENREGISTREMENT
        JR      z,record
        CP      0        ;si TYPE=0 alors RESTITUTION
        JR      z,play
        RET              ;retour BASIC sinon
;        -------------------------------
;               ENREGISTREMENT
;        -------------------------------
record  DI
        LD      b,#f5   ;port B
lis     LD      c,8     ;8 bits @ lire
;
read_   IN      a,(c)   ;lecture {tat cassette
        SLA     a       ;etat 0 ou 1 ?
        RL      (hl)    ;mettre en m{moire le flag C
tp2     LD      a,11    ;mettre tempo {ventuellement
wait2   DEC     a
        JR      nz,wait2
        DEC     c       ;prochain bit
        JR      nz,read ;on continue pour les bits suivants
;
        INC     hl      ;adresse suivante
        DEC     de      ;un autre octet?
        LD      a,e
        OR      d
        JR      nz,lis  ;si oui on continue
        EI
        RET             ;retour Basic
;        -------------------------------
;                 RESTITUTION
;        -------------------------------
play    DI
cont    LD      c,8     ;8 bits par octet
;
;        SORTIE D'UN OCTET SUR CANAL B
;
sortie  PUSH    de
        LD      e,(hl)  ;octet @ sortir
next    SLA     e       ;tester bit de gauche
        LD      a,0
        JR      nc,outreg
        LD      a,15    ;volume maximum
outreg  LD      b,#f4   ;port A
        LD      d,9     ;registre 9 (Volume) du PSG
        OUT     (c),d   ;selectionner ce registre
        LD      d,a     ;volume a sortir
        LD      b,#f6   ;port C
        IN      a,(c)
        OR      #c0
        OUT     (c),a   ;cette manipulation de bits a pour but
        AND     #3f     ;de pr{server l'{tat du port C
        OUT     (c),a   ;afin de garder le moteur K7
        LD      b,#f4   ;en marche, entre autres
        OUT     (c),d   ;volume
        LD      b,#f6
        LD      d,a
        OR      #80
        OUT     (c),a
        OUT     (c),d
;
        DEC     c
        JR      nz,next
        POP     de
;
        INC     hl
        DEC     de
        LD      a,d
        OR      e
        JR      nz,cont
        EI
        RET