;
; * 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 |