;
; Animation avec une frame en mode "non compacté"
;
; Source à utiliser avec un export de Make3DFrame
;
; Code par DEMONIAK - 07/04/2006
;

        ORG     #200

        Nolist

        DI
Debut:
        LD      IX,TabIndex             ; Tableau d'index des frames
BclFram:
        LD      H,(IX+1)
        LD      L,(IX+0)                ; Récupère pointeur frame
        LD      A,H
        OR      L                       ; Plus de frames ?
        JR      Z,Debut                 ; On reboucle
        LD      SP,HL                   ; SP = pointeur frame

        LD      BC,#7F10                ; Juste
        LD      A,#54                   ; Pour mesurer
        OUT     (C),C                   ; Le temps d'affichage
        OUT     (C),A                   ; D'une frame

        LD      B,#F5
Sync:
        IN      A,(C)
        RRA
        JR      NC,SYNC                 ; Attendre la vbl

        LD      BC,#7F10                ; Juste
        LD      A,#4B                   ; Pour mesurer
        OUT     (C),C                   ; Le temps d'affichage
        OUT     (C),A                   ; D'une frame

DrawFram:
        POP     HL                      ; Récupère adresse octet
        LD      A,H
        OR      L                       ; Si == 0
        JR      Z,FinFram               ; c'est que la frame est terminée
        DEC     SP                      ; Un seul octet à récupérer
        POP     AF                      ; Récupère octet
        LD      (HL),A                  ; Ecriture octet
        JR      DrawFram
FinFram:
        INC     IX                      ; Passer à la frame suivante
        INC     IX
        JR      BclFram
;
; Inclure ici le fichier .ASM généré par Make3DFrame
;
; Exemple
        read    "Duck.asm"
;

        list
_fin: