MSX Village forum

L'atelier [RESOLU] LEILA_K : Ecouter de la musique avec la SCC Comment changer la musique contenu dans la démo SCC LEYLA_K

igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 05/09/2012 à 15h22

Reprise du message précédent

Je viens tout juste d'envoyer un mail à Dvik ;)

J'aime bien expérimenter, et pour le moment, j'peux pas trop me servir de mon bras....Donc je m'occupe à me torturer le cerveau :fou


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 05/09/2012 à 20h52
Faut croire que mon intrusion dans Leila à eu son petit effet :fou

Citation:
*********
Thanks for the contact info. I'll send you the sources tonight

-Daniel
********

@ Métalion: J'ai prévenu Dvik que je ne pouvais rien en faire tout seul et qu'un membre du village est volontaire pour travailler dessus.

Au moins, comme ça, c'est clean. ;) Edité par igal Le 05/09/2012 à 20h57


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 06/09/2012 à 08h04
Oui, j'avais vu ton message sur msx.org


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 06/09/2012 à 11h15
Salut à tous:

Après la générosité de NYYRIKKI en ayant offert Convert.VBS permettant la création de vidéos pour [Dragon's Lair For Msx 2 Démo].

Aujourd’hui, c'est DVIK qui nous fait grâce de ses sources LEILA_K Démo. :noel :noel :noel

Par respect pour l'auteur, pour le moment, je ne les posterai pas ses sources sans lui avoir demandé son consentement. (j'attends un peu avant de lui demander une rallonge :oups )

Cependant, Métalion s'étant proposé de reprendre son oeuvre, il y a fort à parier que de nouvelles évolutions verront le jour très bientôt. :D

Voici son petit mot très prometteur quant aux possibilités offertes par son travail.

Citation:
*********
Hi!

I believe that I found the latest code (it does however build another leilak song). The graphics is there too, but I couldn't find the originals, only compressed data. You probably want to rip that out anyways, but at least it builds a complete demo. The player is pretty straight forward and should be easy to modify.

Just some technical detail, the program synchronizes to the SCC to avoid updating the SCC at a time where a real SCC (no emulator) creates some bad noise because of a hardware bug. This is good for a demo like leila-k, but not for using it in a game.

to build the demo, run: tniasm.exe sccdemo.asm
I included tniasm as well in the zip.

Its been a while since I made the demo, but I believe the music sample is a raw 8 bit file @14466Hz. The code looks like it can handle other sample frequencies as well, but I haven't tested that now.

-Daniel

Fin de Citation:
****************

Histoire de faire languir, voici les sources: :oups


@Métalion: Je te MP les Sources :top Edité par igal Le 06/09/2012 à 13h24


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
MSXlegend Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 18/06/2010 à 22h42

Messages: 6285

Le 07/09/2012 à 12h15
l avantage avec un editeur hexadecimal, c est que l on peut precisement couper le morceau choisi. a mon avis, tu peux tester de suite un echantillonage a 33kh ca fonctionnera. sache qu il n est pas necessaire de faire 33secondes tout rond. tu peux laisser 1mn, ton ed hexadecimal se charge de tronquer ;)

ps: je veux bien le code source si cela ne gene pas :) Edité par MSXlegend Le 07/09/2012 à 12h17


KCX Bluetooth emitter Mono/ Stéréo, Smart USB
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 07/09/2012 à 15h17
J'ai demandé à Dvik s'il étéait ( :oups ) d'accord pour que je libère ses sources.

J'pense pas qu'il fera la fine bouche ;)

(encore un peu de patience :p ) Edité par igal Le 07/09/2012 à 17h12


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 07/09/2012 à 16h39
Bon, j'ai analysé en vitesse les sources de LEILA K.

Les fichiers .pck sont des fichiers compressés par Bitbuster (compression LZ donc) qui ne contiennent que les éléments graphiques de la démo.
Le fichier .raw contient la source sonore à la fréquence d'échantillonnage 14466Hz, mais cette fréquence est modifiable dans les sources.

Le replayer fonctionne comme suit :
- il sélectionne une page de la ROM pour le bank 2 ($6000 - $7FFF)
- il envoie les données sur le premier canal de la SCC, par paquet de 32 octets
- quand il arrive à la fin de la page, il réinitialise le compteur et charge la page suivant dans le bank 2
- quand il arrive à la fin du morceau, il reboucle.

La difficulté en ce qui concerne la modification de la fréquence d'échantillonnage vient du fait qu'il faut synchroniser totalement le code avec la SCC. Autrement dit, il faut que lorsque la SCC a fini de jouer une première fois le sample (à la fréquence pré-définie), le code arrive juste à temps pour mettre à jour le sample avec les données suivantes avant que la SCC reboucle.

Il y a un peu de latitude (il y a une petite boucle d'attende djnz entre chaque mise à jour), mais je ne suis pas sur que l'on puisse aller très loin dans la fréquence d'échantillonnage (à vérifier).

En ce qui concerne la taille maximale du morceau, théoriquement, on peut avoir jusqu'à 254 pages de 8Kb (il faut en garder une pour le code et une pour la SCC). Donc 254x8=2032Kb, ce qui donne 144 secondes (2minutes 24 secondes) à la fréquence de 14466Hz. Edité par Metalion Le 07/09/2012 à 16h44


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 07/09/2012 à 20h09
On peut baisser encore la fréquence d'échantillonnage et garder une qualité acceptable ?



igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 07/09/2012 à 20h15
Metalion :
En ce qui concerne la taille maximale du morceau, théoriquement, on peut avoir jusqu'à 254 pages de 8Kb (il faut en garder une pour le code et une pour la SCC). Donc 254x8=2032Kb, ce qui donne 144 secondes (2minutes 24 secondes) à la fréquence de 14466Hz.






On sait que:

************

1) La durée de l’exécution complète du programme est de presque 33 Secondes.

2) La durée de lecture à 14466hz est "Celle" déterminée par le temps d’exécution du programme.



Je dit peut être des conneries mais:

*************************************

Pour recréer les mêmes conditions, il suffirait d'ajouter 3 fois le programme à la suite du premier.

Forcément, pour des raisons de place, il faudrait déplacer le début du premier SAMPLE après la fin du 4ième programme.



De la sorte, on aurait pas besoin de déterminer le temps d’exécution d'un nouveau programme, puisqu'en réalité, il s'agit du même (à quelques octets près) programme au détail près que:



A) Le premier programme va donc commencer à lire le premier SAMPLE à une adresse autre (celle qui se trouve après la fin du 4ième programme)

La fin de A contient une instruction disant d'aller exécuter B:

B) Le second programme va donc commencer à lire le second SAMPLE à une l'adresse qui se trouve juste après la fin du premier SAMPLE.

La fin de B contient une instruction disant d'aller exécuter C:

C) Le troisième programme va donc commencer à lire le troisième SAMPLE à une adresse qui se trouve juste après la fin du second SAMPLE.

La fin de C contient une instruction disant d'aller exécuter D:

D) Le quatrième programme va donc commencer à lire le quatrième SAMPLE à une adresse qui se trouve juste après la fin du troisième SAMPLE.

La fin de D contient une instruction disant d'aller exécuter A



Dans mon ignorance, je pense que cela devrait t'éviter de galérer comme l'a fait DVIK, puisque tu profite de son programme qu'il a déjà calibré dans sa durée d’exécution.












Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 07/09/2012 à 20h26
Et voila! Ca vient tout juste de tomber:
****************************************
Hi Igal,

Yes you can publish the source code on MsxVillage if you want.

I didn't spend time cleaning it up, but it is fairly readable as is.

If people have questions, feel free to ask. I'll keep an eye on
the forum to see if anything comes up and if people post any
improvements (bigger roms for example).

Thanks,
-Daniel
****************************************

Un grand merci à Daniel. Vraiment sympa de sa part. :top :top :top

Son site => http://www.dvik-joyrex.com/

C'est donc une exclusivité du MSXVILLAGE que voici:

Les Sources => leilak.zip

Code TEXT :
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
 
 
        fname "leila_k.rom"
 
        org 4000h
        dw  4241h,START,0,0,0,0,0,0
 
 
Bank1:  equ      05000h
Bank2:  equ      07000h
Bank3:  equ      09000h
Bank4:  equ      0B000h
 
 
;SampleFrequency: equ 22050
SampleFrequency: equ 14466
;SampleFrequency: equ 11025
 
Period: equ      3579545 / SampleFrequency
 
;-------------------------------------
; Entry point
;-------------------------------------
START:
        call powerup
        xor a
        call 005Fh
 
        di
 
        call    VdpTest
        jp      z,.sc2
        call    LoadIntro7
        call    IntroDelay
        call    LoadScreen7
        jp      .cont
.sc2:
        call    LoadIntro2
        call    IntroDelay
        call    LoadScreen2
.cont:
 
        ld  a,3Fh
        LD  (Bank3),A
 
        call    SccInit
 
        call    ReplayerInit
 
        call    PlaySynced          ; Workaround for SCC defect
        ret
 
 
 
IntroDelay:       
        ei
        ld      b,100
.loop:
        halt
        djnz    .loop
        di
        ret
 
;-------------------------------------
;; Need to wait enough to not access SCC while
;; playing sample 15 and 16. This method takes
;; this into account
;-------------------------------------
PlaySynced:
.aloop:
IF 1
        ld      b,170
.busywait:
        nop
        nop
        nop
        nop
        djnz    .busywait
ELSE
        ld      b,140
.busywait2:
        nop
        nop
        nop
        nop
        djnz    .busywait2
 
        ld      b,38
        ld      hl,9800h+32*3
.busywait3:
        cp      (hl)
        cp      (hl)
        djnz    .busywait3
ENDIF
 
        call    ReplayerUpdate32
        jp      .aloop
        ret
 
 
;-------------------------------------
; Initialize the scc
;-------------------------------------
SccInit:
        ld  a,15
        ld  (988Ah),a       ; volume ch1
 
        xor a
        ld  (988Bh),a       ; volume ch2
        ld  (988Ch),a       ; volume ch3
        ld  (988Dh),a       ; volume ch4
        ld  (988Eh),a       ; volume ch5
 
        ld  a,00011111b     ;   ALL channels active
        ld  (988Fh),a
 
        ld      hl,9800h+32*3   ; counter in channel 4
        ld      bc,2000h
.counter:
        ld  (hl),c
        inc hl
        inc c
        djnz  .counter
 
        ld  a,10100000b ; Rotate only CH4 & CH5 common waveform. Waveform will be rotated with CH4 freq.
        ld  (98E0h),a
 
        ld  hl,Period
 
        ld  (9880h),hl
        ld  (9886h),hl ; here CH4 restarts its play on emulators
        ld  (9888h),hl  ; here CH4 restarts its play on the real thing
IF 1
        ld  a,$20
        ld  (98E0h),a
ENDIF    
        ret    
 
 
 
;-------------------------------------
; Initialize replayer
;-------------------------------------
ReplayerInit:
        ld      hl,9800h
        ld      (WavePos),hl
        ld      hl,6000h
        ld      (SamplePos),hl
        ld      a,3
        ld      (SamplePage),a
        ld      (Bank2),a
        ret
 
 
;-------------------------------------
; Moves sample pointer to next page
;-------------------------------------
ReplayerNextPage:
        ld      hl,6000h
        push    af
        ld      a,(SamplePage)
        cp      (SAMPLE_END - SAMPLE_START + 1FFFh)/2000h
        jr      nz,.norewind
        ld      a,2
.norewind:
        inc     a
        ld      (SamplePage),a
        ld      (Bank2),a
        pop     af
        ret
 
ReplayerUpdate32:
        ld      hl,(SamplePos)
        ld      de,9800h
        ld      bc,16
        ldir
 
        push    bc
        ld      b,80
.wait:
        djnz    .wait
        pop     bc
 
        push    hl
        ld      hl,Period
        ld      (9880h),hl
        pop     hl
 
        ld      bc,16
        ldir
 
        bit     7,h
        call    nz,ReplayerNextPage
 
        ld      (SamplePos),hl
        ret
 
 
;-------------------------------------
; Updates the SCC wave table. This method updates
; the entire wave table
;-------------------------------------
ReplayerUpdate32_b:
        ld      bc,32
        ld      de,9800h
 
        ld      hl,9800h+32*3
        ld      a,28
.wait:
        cp      (hl)
        jp      nz,.wait
 
        ld      hl,(SamplePos)
 
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
 
        ld      b,100
.loop:
        djnz    .loop        
 
 
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
        ldi
 
        bit     7,h
        call    nz,ReplayerNextPage
 
        ld      (SamplePos),hl
        ret
 
 
 
 
 
;-------------------------------------
;   Powerup routine for non-Z180 code.
;   set pages and subslot
;-------------------------------------
powerup:
        call    0x138
        rrca
        rrca
        and     0x03
        ld      c,a
        ld      b,0
        ld      hl,0xfcc1
        add     hl,bc
        or      (hl)
        ld      b,a
        inc     hl
        inc     hl
        inc     hl
        inc     hl
        ld      a,(hl)
        and     0x0c
        or      b
 
        ld      h,0x80
        call    0x24
 
        ret
 
 
;-------------------------------------
; To make rom guesseres happy
;-------------------------------------
dummy:
        xor     a
        ld      (Bank1),a
        ld      (Bank3),a
        ld      (Bank1),a
        ld      (Bank3),a
        ret
 
 
WrtVdp:
        ld      a,b
        out     (99h),a
        ld      a,c
        or      80h
        nop
        out     (99h),a
        ret
 
VdpTest:
        ei
        ei
        halt
        di
 
        in      a,[99h]
        nop
        nop
        in      a,[99h]
        push    af
 
        ld      bc,$010f
        call    WrtVdp
        nop
        in      a,[99h]
        push    af
 
        ld      bc,$000f
        call    WrtVdp
 
        pop     af
        pop     bc
 
        sub     b
        ret
 
VdpRegs2:
db  $02,$a0,$06,$ff,$03,$36,$07,$0f
 
LoadIntro2:
        ld      bc,$a001
        call    WrtVdp
 
        ; Load 1st quarter
        ld      a,0
        out     (99h),a
        ld      a,40h
        nop
        nop
        out     (99h),a
        ld      hl,LOGO2_A
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_a:
        outi
        jp      nz,.loop_a
        dec     a
        jp      nz,.loop_a
 
        ; Load 2nd quarter
        ld      a,0
        out     (99h),a
        ld      a,60h
        nop
        nop
        out     (99h),a
        ld      hl,LOGO2_B
        ld      de,TempBase
        call    depack
 
        ld      bc,1800h
        ld      hl,TempBase
.cloop:
        ld      a,(hl)
        and     $f0
        jp      nz,.nofix1
        set     4,(hl)
.nofix1:
        ld      a,(hl)
        and     $0f
        jp      nz,.nofix2
        set     0,(hl)
.nofix2:
        inc     hl
        dec     bc
        ld      a,b
        or      c
        jp      nz,.cloop        
 
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_b:
        outi
        jp      nz,.loop_b
        dec     a
        jp      nz,.loop_b
 
        ; Vdp register
        ld      hl,VdpRegs2
        ld      bc,1899h
        ld      a,80h
.loop:
        outi
        nop
        nop
        out     (c),a
        inc     a
        cp      88h
        jp      nz,.loop
 
        ld      bc,$e001
        call    WrtVdp
 
        ret
 
 
LoadScreen2:
        ld      bc,$a001
        call    WrtVdp
 
        ; Load 1st quarter
        ld      a,0
        out     (99h),a
        ld      a,40h
        nop
        nop
        out     (99h),a
        ld      hl,SC2_A
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_a:
        outi
        jp      nz,.loop_a
        dec     a
        jp      nz,.loop_a
 
        ; Load 2nd quarter
        ld      a,0
        out     (99h),a
        ld      a,60h
        nop
        nop
        out     (99h),a
        ld      hl,SC2_B
        ld      de,TempBase
        call    depack
 
        ld      bc,1800h
        ld      hl,TempBase
.cloop:
        ld      a,(hl)
        and     $f0
        jp      nz,.nofix1
        set     4,(hl)
.nofix1:
        ld      a,(hl)
        and     $0f
        jp      nz,.nofix2
        set     0,(hl)
.nofix2:
        ld      a,c
        dec     a
        cp      8
        jp      nc,.nofix3
        ld      a,$ff
        ld      (hl),a
.nofix3:
        inc     hl
        dec     bc
        ld      a,b
        or      c
        jp      nz,.cloop        
 
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_b:
        outi
        jp      nz,.loop_b
        dec     a
        jp      nz,.loop_b
 
        ; Vdp register
        ld      hl,VdpRegs2
        ld      bc,1899h
        ld      a,80h
.loop:
        outi
        nop
        nop
        out     (c),a
        inc     a
        cp      88h
        jp      nz,.loop
 
        ld      bc,$e001
        call    WrtVdp
 
        ret
 
 
VdpRegsIntro7:
db  $06,$62,$1f,$80,$00,$ef,$ff,$07
db  $08,$80,$00,$00,$00,$01,$00,$00
db  $00,$90,$00,$00,$3b,$05,$00,$00
 
 
IF 0
db  $06,$60,$1f,$80,$01,$ef,$0f,$07
db  $08,$82,$00,$00,$00,$01,$00,$00
db  $00,$00,$00,$00,$3b,$05,$00,$00
ENDIF
 
PaletteIntro:
dw  $000,$444,$222,$666,$111,$555,$333,$777
dw  $000,$000,$000,$000,$000,$000,$000,$000
 
LoadIntro7:
        ld      bc,$a001
        call    WrtVdp
 
        ld      a,1
        ld      (Bank2),a
 
        ; Load 1st quarter
        ld      a,0
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,40h
        out     (99h),a
        ld      hl,LOGO7_A
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_a:
        otir
        dec     a
        jp      nz,.loop_a
 
        ; Load 2nd quarter
        ld      a,0
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,60h
        out     (99h),a
        ld      hl,LOGO7_B
        ld      de,TempBase
        call    depack
 
 
        ld      bc,2000h
        ld      hl,TempBase
.cloop:
        ld      a,(hl)
        and     $f0
        jp      nz,.nofix1
        set     7,(hl)
.nofix1:
        ld      a,(hl)
        and     $0f
        jp      nz,.nofix2
        set     3,(hl)
.nofix2:
        inc     hl
        dec     bc
        ld      a,b
        or      c
        jp      nz,.cloop        
 
 
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_b:
        otir
        dec     a
        jp      nz,.loop_b
 
        ; Load 3rd quarter
        ld      a,1
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,40h
        out     (99h),a
        ld      hl,LOGO7_C
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_c:
        otir
        dec     a
        jp      nz,.loop_c
 
        ; Load 4th quarter
        ld      a,1
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,60h
        out     (99h),a
        ld      hl,LOGO7_D
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_d:
        otir
        dec     a
        jp      nz,.loop_d
 
        ; Vdp register
        ld      hl,VdpRegsIntro7
        ld      bc,1899h
        ld      a,80h
.loop:
        outi
        out     (c),a
        inc     a
        cp      98h
        jp      nz,.loop
 
 
        ld      bc,209Ah
        ld      hl,PaletteIntro
        otir
 
        ld      bc,$e001
        call    WrtVdp
 
        ret        
 
 
 
VdpRegs7:
db  $0a,$a0,$1f,$80,$00,$f7,$1e,$00
db  $08,$80,$00,$01,$00,$00,$03,$00
db  $00,$00,$00,$00,$3b,$05,$00,$00
 
Palette:
dw  $777,$441,$463,$476,$271,$111,$551,$434
dw  $352,$676,$471,$063,$122,$555,$333,$374
 
LoadScreen7:
        ld      bc,$a001
        call    WrtVdp
 
        ld      a,1
        ld      (Bank2),a
 
        ld      a,2
        ld      (Bank3),a
 
        ; Load 1st quarter
        ld      a,0
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,40h
        out     (99h),a
        ld      hl,SC7_A
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_a:
        otir
        dec     a
        jp      nz,.loop_a
 
        ; Load 2nd quarter
        ld      a,0
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,60h
        out     (99h),a
        ld      hl,SC7_B
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_b:
        otir
        dec     a
        jp      nz,.loop_b
 
        ; Load 3rd quarter
        ld      a,1
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,40h
        out     (99h),a
        ld      hl,SC7_C
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_c:
        otir
        dec     a
        jp      nz,.loop_c
 
        ; Load 4th quarter
        ld      a,1
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,60h
        out     (99h),a
        ld      hl,SC7_D
        ld      de,TempBase
        call    depack
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_d:
        otir
        dec     a
        jp      nz,.loop_d
 
        ld      a,2
        ld      (Bank2),a
 
        ; Load 5th quarter
        ld      a,4
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,40h
        out     (99h),a
        ld      hl,SC7_E
        ld      de,TempBase
        call    depack
 
        ld      bc,2000h
        ld      hl,TempBase
.cloop_d:
        ld      a,l
        and     $7f
        cp      $7f
        jp      nz,.nofix_d
        ld      a,$00
        ld      (hl),a
.nofix_d:
        inc     hl
        dec     bc
        ld      a,b
        or      c
        jp      nz,.cloop_d
 
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_e:
        otir
        dec     a
        jp      nz,.loop_e
 
        ; Load 6th quarter
        ld      a,4
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,60h
        out     (99h),a
        ld      hl,SC7_F
        ld      de,TempBase
        call    depack
 
        ld      bc,2000h
        ld      hl,TempBase
.cloop_f:
        ld      a,l
        and     $7f
        cp      $7f
        jp      nz,.nofix_f
        ld      a,$00
        ld      (hl),a
.nofix_f:
        inc     hl
        dec     bc
        ld      a,b
        or      c
        jp      nz,.cloop_f
 
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_f:
        otir
        dec     a
        jp      nz,.loop_f
 
        ; Load 7th quarter
        ld      a,5
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,40h
        out     (99h),a
        ld      hl,SC7_G
        ld      de,TempBase
        call    depack
 
        ld      bc,2000h
        ld      hl,TempBase
.cloop_g:
        ld      a,l
        and     $7f
        cp      $7f
        jp      nz,.nofix_g
        ld      a,$00
        ld      (hl),a
.nofix_g:
        inc     hl
        dec     bc
        ld      a,b
        or      c
        jp      nz,.cloop_g
 
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_g:
        otir
        dec     a
        jp      nz,.loop_g
 
        ; Load 8th quarter
        ld      a,5
        out     (99h),a
        ld      a,8Eh
        out     (99h),a
        ld      a,0
        out     (99h),a
        ld      a,60h
        out     (99h),a
        ld      hl,SC7_H
        ld      de,TempBase
        call    depack
 
        ld      bc,2000h
        ld      hl,TempBase
.cloop_h:
        ld      a,l
        and     $7f
        cp      $7f
        jp      nz,.nofix_h
        ld      a,$00
        ld      (hl),a
.nofix_h:
        inc     hl
        dec     bc
        ld      a,b
        or      c
        jp      nz,.cloop_h
 
        ld      hl,TempBase
        ld      bc,0098h        
        ld      a,20h
.loop_h:
        otir
        dec     a
        jp      nz,.loop_h
 
 
        ; Vdp register
        ld      hl,VdpRegs7
        ld      bc,1899h
        ld      a,80h
.loop:
        outi
        out     (c),a
        inc     a
        cp      98h
        jp      nz,.loop
 
 
        ld      bc,209Ah
        ld      hl,Palette
        otir
 
        ld      bc,$e001
        call    WrtVdp
 
        ret        
 
include "bitbuster.asm"
 
SC2_A:
incbin "sc2_a.bin.pck"
SC2_B:
incbin "sc2_b.bin.pck"
 
LOGO2_A:
incbin "logo2_a.bin.pck"
LOGO2_B:
incbin "logo2_b.bin.pck"
 
;-------------------------------------
; Padding for rom player
;-------------------------------------
        DS (6000h - $)
 
LOGO7_A:
incbin "logo5_a.bin.pck"
LOGO7_B:
incbin "logo5_b.bin.pck"
LOGO7_C:
incbin "logo5_c.bin.pck"
LOGO7_D:
incbin "logo5_d.bin.pck"
 
SC7_A:
incbin "sc7_a.bin.pck"
SC7_B:
incbin "sc7_b.bin.pck"
SC7_C:
incbin "sc7_c.bin.pck"
SC7_D:
incbin "sc7_d.bin.pck"
 
SC7_E:
incbin "sc7_e.bin.pck"
SC7_F:
incbin "sc7_f.bin.pck"
SC7_G:
incbin "sc7_g.bin.pck"
SC7_H:
incbin "sc7_h.bin.pck"
 
        DS (0A000h - $)
 
;-------------------------------------
; Sample data
;-------------------------------------
SAMPLE_START:
;incbin "ll2.raw",0,7A000h
incbin "ll2.raw"
SAMPLE_END:
 
 
;-------------------------------------
; Padding, align rom image to a power of two.
;-------------------------------------
 
SAMPLE_LENGTH:  equ SAMPLE_END - SAMPLE_START
 
DS (7A000h - SAMPLE_LENGTH)
 
FINISH:
 
 
;---------------------------------------------------------
; Variables
;---------------------------------------------------------
 
TempBase:       equ $c000
 
VariableBase:   equ $e000
 
WavePos:        equ VariableBase + 0
SamplePos:      equ VariableBase + 2
SamplePage:     equ VariableBase + 4
 


Lâchez vous les gars. C'est noël avant l'heure :noel :noel :noel Edité par igal Le 07/09/2012 à 20h40


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 07/09/2012 à 20h34
Merci Igal et merci Daniel VIK pour les sources :top



Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 07/09/2012 à 20h52
igal :
On sait que:

************

1) La durée de l’exécution complète du programme est de presque 33 Secondes.

2) La durée de lecture à 14466hz est "Celle" déterminée par le temps d’exécution du programme.



Je dit peut être des conneries mais:

*************************************


Non, Igal, ce n'est pas nécessaire de faire comme ça, parce que le programme de dvik s'adapte à la longueur du sample.

A l'assemblage de la source, il calcule la longueur du sample en nombre de pages 8Kb, et adapte son exécution en fonction.

Il suffit donc de mettre le sample que l'on veut, et le programme s'adapte.

Tant qu'on reste à la même fréquence d'échantillonnage, il n'y a rien d'autre à changer.




MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie