Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 30 Nov 2025, 00:33

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


utilisation KITAY

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 2
 [ 26 message(s) ]  Aller vers la page 1, 2  Suivant
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
MIC
 Sujet du message : utilisation KITAY
Message Publié : 01 Mai 2008, 11:22 
Hors-ligne
VIP
VIP

Inscription : 07 Nov 2007, 21:36
Message(s) : 433
Madram cite dans la doc de KITAY ' utiliser des fichier YM5 ou 6
decompacte '
quelle soft doit on utiliser pour décompacter un .YM
me semble avoir lu QQPART qu'un soft devait sortir lisant directement les .YM


Haut
 Profil  
 
eliot
 Sujet du message : Re: utilisation KITAY
Message Publié : 02 Mai 2008, 08:39 
Hors-ligne
Rulezz
Rulezz

Inscription : 08 Oct 2007, 08:20
Message(s) : 103
Localisation : COUTANCES - MANCHE (50)
MIC a écrit :
Madram cite dans la doc de KITAY ' utiliser des fichier YM5 ou 6
decompacte '
quelle soft doit on utiliser pour décompacter un .YM
me semble avoir lu QQPART qu'un soft devait sortir lisant directement les .YM


Les .YM sont compactés avec LHA.


Haut
 Profil  
 
hERMOL
 Sujet du message :
Message Publié : 03 Mai 2008, 13:08 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
Winrar d'Alexander Roshal te décompact sans probleme le format LZH/LHA


Haut
 Profil  
 
MIC
 Sujet du message :
Message Publié : 05 Mai 2008, 17:20 
Hors-ligne
VIP
VIP

Inscription : 07 Nov 2007, 21:36
Message(s) : 433
ça doit etre trop simple :shock: ...mais j'y arrive pas
j'ai un fichier .ym5 , je le met sur une disquette ...kitay me bien dit d'utiliser des fichier ym5 , 6 decompréssé ...
a part LHA qui fonctionne sous dos , y a rien d'autre pour decompressé un .YM ...ça ressemble a quoi un .YM decompréssé , a part des info , style titre , artiste..


Haut
 Profil  
 
hERMOL
 Sujet du message :
Message Publié : 05 Mai 2008, 18:18 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
les premiers octets d'un fichier compacter avec LHA:
Code :
00000000: &21 &75 &2D &6C &68 &35 &2D
en ascii: !u-lh5-


et avec un fichier décompacter:
Code :
00000000: &59 &4D &35 &21 &4C &65 &4F &6E &41 &72 &44 &21 &00 &00
en ascii: YM5!AUTEUR


avec winrar ca va tout seul (ALT + E sur le fichier selectionner ) , je comprends que ca marche pas chez toi .. sinon envoye moi le fichier par email[/quote]


Haut
 Profil  
 
MIC
 Sujet du message :
Message Publié : 05 Mai 2008, 20:24 
Hors-ligne
VIP
VIP

Inscription : 07 Nov 2007, 21:36
Message(s) : 433
j'ai renommé mes .ym en RAR ..ça marche ! :D
merci Hermol !


Haut
 Profil  
 
MIC
 Sujet du message : Re: utilisation KITAY
Message Publié : 27 Mai 2008, 10:27 
Hors-ligne
VIP
VIP

Inscription : 07 Nov 2007, 21:36
Message(s) : 433
j'ai convertis quelques morceaux , j'arrive a les rejouer en utilisant le fichier play-ay.bin...
les resultat sont ceux que j'attendais..
par contre je n'arrive pas a compiler la source de ce fichier (.sce) presente sur le .dsk sous winape , il me trouve plein d'erreur , Hermol je sais que tu as utilisé ça dans une des tes demos xmas
tu la fais sous winape ou maxam


Haut
 Profil  
 
BDCIron
 Sujet du message : Re: utilisation KITAY
Message Publié : 27 Mai 2008, 18:23 
Madram codes sous Dams, pas sous maxam...


Haut
  
 
hERMOL
 Sujet du message : Re: utilisation KITAY
Message Publié : 27 Mai 2008, 20:39 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
oui pour convertire les sources ".sce" DAMS en fichier ascii compatible maxam/winape utilise le DAMS CONVERTER d'ANTOINE / POW :

https://cpcrulez.fr/Utils/index.php ... d=damspack

ou la derniere version de managedsk ( Demoniak ) ..


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: utilisation KITAY
Message Publié : 27 Mai 2008, 21:02 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
voilà , sans la routine de chargement ("LOAD") et 101% compatible WINAPE :roll: ...

fichier binaire du .AY ( .YM convertis ) placé en &7600 -> label "YMLZ"

BON CODE ! :magic:

Code :
nolist
run &6d00
;
;PLAY-AY.SCE  OVerLanders 24/5/2000
;v0.5
;
; Concu avec dams en #3e8 / #C0 / M#6600
;
;   Pour placer manuellement ses tampons de decompression, definir OFTAB0 etc,
;mettre  les bons JUMP en V0 etc et enlever CALL ATTRIBU
;
;C'est quand on vit seul qu'on a le plus besoin d'un lit a deux places.
;
        ORG &7600
YMLZ    incbin "foft.bin"

        ORG     #6D00
WANTLOOP        EQU     1       ;0 = ne boucle pas (routine + rapide)
DECRUBUF        EQU     #E000   ;doit valoir x000 ou x800 (cf ATTRIBU)
DUREE   EQU     YMLZ    ;Indiquee dans le header
;
        DI
        LD      BC,#7F10
        OUT     (C),C
        LD      A,#54
        OUT     (C),A
;
        LD      HL,(#38)
        LD      (INTER+1),HL
        LD      HL,#C9FB
        LD      (#38),HL
        EXX
        EX      AF,AF'
        PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL
        EI
        CALL    READHEAD
        CALL    ATTRIBU
        CALL    CREEPLAY
        CALL    POKECODE
        CALL    RAZVAR
        CALL    RAZ_PSG
;
;Il faut preparer quelques donnees d'avances
;
        LD      A,(NBR_REG)
AMORCE:
        PUSH    AF
        CALL    GETREG
        POP     AF
        DEC     A
        JR      NZ,AMORCE
;
;
;
MAIN:
        LD      BC,#F501
SYNC_1:
        IN      A,(C)
        AND     C
        JR      Z,SYNC_1
;
        HALT
        HALT
        HALT
FASTFOWA:
        LD      BC,#7F10
        OUT     (C),C
        LD      A,#44
        OUT     (C),A
        CALL    GETREG
        LD      BC,#7F10
        OUT     (C),C
        LD      A,#56
        OUT     (C),A
        CALL    PLAYREG
        LD      BC,#7F10
        OUT     (C),C
        LD      A,#54
        OUT     (C),A
;
        IF      WANTLOOP
        ELSE
MESURE: LD      HL,0
        DEC     HL
        LD      (MESURE+1),HL
        LD      A,H
        OR      L
        JR      Z,FIN
        ENDIF
;
        LD      A,#40
        CALL    TST_KEY
        RLA
        JR      NC,FASTFOWA
;
        LD      A,#45
        CALL    TST_KEY
        AND     128
        JP      NZ,MAIN
;
FIN:
        DI
INTER:  LD      HL,0
        LD      (#38),HL
        POP     HL
        POP     DE
        POP     BC
        POP     AF
        EX      AF,AF'
        EXX
        EI
        JP      #BCA7
;
RAZ_PSG:
;
;;La routine de PLAY ne met pas a jour les registres s'ils ne sont pas modifies.
;;Or, ils sont consideres a 0 lors de la 1er interation.
;;On doit donc reelement les mettre a 0. (nb 7 a 0 : canaux et bruit ouverts)
;;
        LD      B,14
        LD      C,13    ; Volumes raz avant reg 7
        XOR     A
RP_LP:
        PUSH    BC
        CALL    PSG
        POP     BC
        DEC     C
        DJNZ    RP_LP
;
        RET
;
;
PSG:
        LD      B,#F4
        OUT     (C),C
        LD      BC,#F6C0
        OUT     (C),C
        DB      #ED,#71
        LD      B,#F4
        OUT     (C),A
        LD      BC,#F680
        OUT     (C),C
        DB      #ED,#71
        RET
;
TST_KEY:
        DI
        LD      BC,#F40E
        OUT     (C),C
        LD      BC,#F6C0
        OUT     (C),C
        DB      #ED,#71
        LD      BC,#F792
        OUT     (C),C
        LD      B,#F6
        OUT     (C),A
        LD      A,#F4
        IN      A,(0)
        DB      #ED,#71
        LD      BC,#F782
        OUT     (C),C
        EI
        RET
;
;
MODELE:
        LD      A,(HL)
        CP      0
        JR      Z,MO_SAME
        LD      (0),A   ; 0 remplace dans CREEPLAY
;
MO_SUITE:
        OUT     (C),C   ; Registre
        EXX
        DB      #ED,#71  ; OUT (C),0
        LD      B,H
        OUT     (C),A
        LD      B,L
        OUT     (C),E
        OUT     (C),D
        EXX
MO_SAME:
        INC     C
MO_END:
;
MO2:
        INC     DE
        LD      A,D
        AND     #3
        LD      D,A
        LD      (PLAYPLAG+1),DE
        RET
MO2_END:
;
;
PLAYREG:
        LD      DE,#C080
        LD      HL,#F4F6
        LD      B,L
        OUT     (C),D
        EXX
PLAYPLAG:       LD      DE,0    ;Fourni poids faible (sur 8 et 10 bits)
; PLAYPLAG est remis a jour la fin
        LD      L,E
        LD      B,#F4
        LD      C,0
;
;
;Partie  cree par CREEPLAY
;
PLAYCODE:       DS      MO_END-MODELE+4*14
        DS      MO2_END-MO2
;
GETREG:
        DI
        LD      (SAVETMP+1),SP
        LD      A,(NBR_REG)     ; Necessaire pour V1 a V13
        DEC     A               ; mais pas pour VMESURE/V0
        IF      WANTLOOP
        DB      #DD
DECALEH:
        LD      H,0
        ENDIF
        LD      IY,GET_RET
GETWITCH:
        JP      V0      ;Quelle routine ?
GET_RET:
        LD      HL,(GETWITCH+1)
        DEC     HL
        LD      D,(HL)  ; Recupere adresse
        DEC     HL
        LD      E,(HL)
        LD      (GETWITCH+1),DE
SAVETMP:
        LD      SP,0
        EI
        RET
;
;
        DW      V1      ; Adresse prochaine routine
VMESURE:
        IF      WANTLOOP
;
;S'il reste moins que "NBR_REG" donnees a recuperer,
;on recupere ces quelques donnees, on reset (methode brute pour l'instant),
;puis on recupere qq donnees complementaire.
;
;Sinon, on saute normallement a V0, et le test ne sera pas effectue
;de V1 a V13 ...
;
MESURE: LD      HL,0
        LD      C,L
        LD      D,0
        LD      A,(NBR_REG)
        LD      E,A
        OR      A
        SBC     HL,DE
        LD      (MESURE+1),HL
        DEC     A
        JP      NC,V0
;
;Pour V1 etc..., on ne refera pas le test precedent
;
        LD      B,D
        LD      DE,RETIENT
        LD      (GETWITCH+1),DE
        LD      DE,(DUREE)
        ADD     HL,DE
        LD      (MESURE+1),HL
        LD      A,C
        LD      (COMPLETE+1),A
        LD      (RETIENT+1),A
;
;On doit determiner la position destination dans les buffers
;
        LD      HL,(PLAYPLAG+1)
        ADD     HL,BC
        LD      A,(NBR_REG)
        LD      C,A
        ADD     HL,BC
        LD      A,H
        AND     #3
        LD      (DECALEH+1),A
        LD      A,L
        LD      (DECALEL+1),A
;
RETIENT:
        LD      A,0
        DEC     A
        JP      M,CAS0  ; 0 data ? Il faut reseter
        LD      IY,GET_RET_
GETWITC_:
        JP      V0
;
CAS0:
        LD      A,(NBR_REG)
        JR      RESET
;
GET_RET_:
        LD      A,(NBR_REG)
COMPLETE:
        LD      B,0
        SUB     B
;
RESET:
        LD      HL,(GETWITC_+1)
        INC     HL
        LD      E,(HL)  ; Plage de variable
        INC     HL
        LD      D,(HL)
        INC     DE
        INC     DE
        INC     DE
        INC     DE
        LD      HL,REGSCOPY-REGS+1
        ADD     HL,DE
        EX      DE,HL
DECALEL:
        LD      (HL),0
        INC     HL
        EX      DE,HL
        LDI
        LDI
        LDI
        LDI
        LDI
;
        LD      IY,GET_RET2
        DEC     A
        JR      GETWITC_
GET_RET2:
        LD      HL,(GETWITC_+1)
        DEC     HL
        LD      D,(HL)  ; Recupere adresse
        DEC     HL
        LD      E,(HL)
        LD      HL,-VMESURE-1   ; Pour redirection, il faut boucler sur
        ADD     HL,DE   ; V0
        JR      C,REGLP_OK
        LD      HL,VMESURE
        LD      (GETWITCH+1),DE
        LD      DE,V0
REGLP_OK:
        LD      (GETWITC_+1),DE
        LD      SP,(SAVETMP+1)
        EI
        RET
;
;
        DW      V1
        ENDIF
V0:
        LD      SP,REGS  ; !!! PLACER le LD SP apres le label !!!
VROUT:
        JP      DECOMP4 ;ATTENTION ! L'ecart doit rester
        DW      V2
V1
        LD      SP,REGS+10
VROUT_:
        JP      DECOMP0 ;constant pour les modifs d'ATTRIBU
        DW      V3
V2:
        LD      SP,REGS+20
        JP      DECOMP4
        DW      V4
V3:
        LD      SP,REGS+30
        JP      DECOMP0
        DW      V5
V4:
        LD      SP,REGS+40
        JP      DECOMP4
        DW      V6
V5
        LD      SP,REGS+50
        JP      DECOMP0
        DW      V7
V6:
        LD      SP,REGS+60
        JP      DECOMP0
        DW      V8
V7:
        LD      SP,REGS+70
        JP      DECOMP0
        DW      V9
V8:
        LD      SP,REGS+80
        JP      DECOMP0
        DW      V10
V9:
        LD      SP,REGS+90
        JP      DECOMP0
        DW      V11
V10:
        LD      SP,REGS+100
        JP      DECOMP0
        DW      V12
V11:
        LD      SP,REGS+110
        JP      DECOMP0
        DW      V13
V12:
        LD      SP,REGS+120
        JP      DECOMP0
        DW      VMESURE     ; !!! BOUCLE EN CONCORDANCE AVEC NBR_REG
V13:
        LD      SP,REGS+130
        JP      DECOMP0
        DW      V15
V14:
        LD      SP,REGS+140
        JP      DECOMP0
        DW      V0
V15:
        LD      SP,REGS+150
        JP      DECOMP0
;
;
D0_CHR:
;
;Place  en premier pour etre atteint par JR
;
        EX      AF,AF'
        LD      A,(HL)
        INC     HL
        EXX
        LD      (DE),A
        INC     E
        EX      AF,AF'
;
;On decremente nbr de caracteres restants.
;
        DEC     A
        EXX
        JP      P,D0_NEXT
;
;
        PUSH    HL
        PUSH    BC
        EXX
;
        PUSH    BC      ; B DOIT ETRE NUL ICI
        PUSH    HL      ; Bidon
        PUSH    DE
        JP      (IY)
;
;
DECOMP0:
;;
;;Entree  : A  = nbr de donnees a decompacter - 1
;;          IY = adr de retour
;On suppose que longueur est code en negatif (ie -2 -> 2 caracteres)
;;
;;On recupere adr destination dans tous les cas
;;(Remarque : D ne change pas, il y a peut etre moyen d'optimiser cela)
;;
        POP     DE
        POP     HL      ;Adresse source pour copie chaine
;
;On recupere B = nbr de caracteres a copier   C est inutilise
;
        POP     BC
        INC     B
        DEC     B
        JR      Z,D0_FLAG
;
D0_MESUR:
;
;On regarde si longueur de chaine restante > nbr de donnees a fournir
;
        IF      WANTLOOP
        EXX
        LD      D,A
        EXX
        ADD     A,B     ; longueur codee en negatif
        JR      NC,D0_AL_
        ELSE
        ADD     A,B
        JR      NC,D0_ALL
        ENDIF
;
        EX      AF,AF'
D0_LP1:
        LD      A,(HL)
        INC     L
        LD      (DE),A
        INC     E
        INC     B
        JR      NZ,D0_LP1
        EX      AF,AF'
;
D0_FLAG:
;
;On recupere FLAGs et pointeur donnees compressees
;(B inutilise)
;
        EXX
        POP     BC
        POP     HL
;
;
;On extrait nouveau flag
;
D0_NEXT:
        SLA     C
        JR      NZ,D0_FLGOK
;
        LD      C,(HL)
        INC     HL
        DB      #CB,#31 ;       SLL C
D0_FLGOK:
        JR      NC,D0_CHR
;
;Test similaire au precedent
;
        LD      B,(HL)
        INC     HL
        LD      D,A     ; Sauve pour D0_LEFT
        ADD     A,B
        JR      NC,D0_LEFT
;
;Il restera (A+1) donnees a fournir apres copie de la chaine
;
        EX      AF,AF'
        LD      A,B
        EXX
        LD      B,A
        EXX
        LD      A,(HL)
        INC     HL
        EXX
        IF      WANTLOOP
        ADD     A,C
        ENDIF
        LD      L,A
D0_LP2:
        LD      A,(HL)
        INC     L
        LD      (DE),A
        INC     E
        INC     B
        JR      NZ,D0_LP2
        EX      AF,AF'
        EXX
        JR      D0_NEXT
;
D0_LEFT:
;
;Idem que D0_ALL mais sur moins de donnees.
;
        EX      AF,AF'  ; Pour l'instant on conserve A-B
        LD      A,D     ; Nombre de valeur restantes a copier-1
        EXX
        LD      B,A
        INC     B
        EXX
        LD      A,(HL)
        INC     HL
        PUSH    HL
        PUSH    BC
        EXX
        IF      WANTLOOP
        ADD     A,C
        ENDIF
        LD      L,A
D0_LP3:
        LD      A,(HL)
        INC     L
        LD      (DE),A
        INC     E
        DJNZ    D0_LP3
        EX      AF,AF'
        LD      B,A
        INC     B       ; Longueur restante pour prochaine fois
        PUSH    BC
;
        PUSH    HL
        PUSH    DE
        JP      (IY)
;
        IF      WANTLOOP
D0_AL_:
;
;  D0_ALL ne convient pas quand on veut changer dynamiquement le nombre
;  de valeurs a recuperer (c'est le cas pour le bouclage).
;
        INC     A
        LD      B,A
        PUSH    BC
        EXX
        LD      A,D
        EXX
        LD      B,A
        INC     B
;
D0_AL_LP:
        LD      A,(HL)
        LD      (DE),A
        INC     L
        INC     E
        DJNZ    D0_AL_LP
;
        PUSH    HL
        PUSH    DE
        JP      (IY)
;
        ELSE
;
D0_ALL:
;
;La chaine a copier fournie toutes les donnees
;
        INC     A
        LD      B,A     ; Longueur restante pour prochaine fois
        PUSH    BC
;
D0_COPY:
        LD      A,(HL)
        LD      (DE),A
        INC     L
        INC     E
        DS      80      ;Place pour NBR_REG copies
        DS      5       ;Place pour D0_MODEL
;
D0_MODEL:                       ; Sera copie a la suite des LDI
        PUSH    HL
        PUSH    DE
        JP      (IY)
D0_MODE_:
;
        ENDIF
;
;
D4_CHR:
;
;Place  en premier pour etre atteint par JR
;
        EX      AF,AF'
        LD      A,(HL)
        INC     HL
        EXX
        LD      (DE),A
        INC     DE
        RES     2,D
        EX      AF,AF'
;
;On decremente nbr de caracteres restants.
;
        DEC     A
        EXX
        JP      P,D4_NEXT
;
;
        PUSH    HL
        PUSH    BC
        EXX
;
        PUSH    BC      ; B DOIT ETRE NUL ICI
        PUSH    HL      ; Bidon
        PUSH    DE
        JP      (IY)
;
;
DECOMP4:
;
;;Base sur DECOMP0
;;Entree  : A  = nbr de donnees a decompacter - 1
;;          IY = adr de retour
;;On suppose que longueur est code en negatif (ie -2 -> 2 caracteres)
;;
;;On recupere adr destination dans tous les cas
;;(Remarque : D ne change pas, il y a peut etre moyen d'optimiser cela)
;;
        POP     DE
        POP     HL      ; Adresse source pour copie chaine
;
;On recupere B = nbr de caracteres a copier   C est inutilise
;
        POP     BC
        INC     B
        DEC     B
        JR      Z,D4_FLAG
;
D4_MESUR:
;
;On regarde si longueur de chaine restante > nbr de donnees a fournir
;
        IF      WANTLOOP
        EXX
        LD      D,A
        EXX
        ADD     A,B     ; longueur codee en negatif
        JR      NC,D4_AL_
        ELSE
        ADD     A,B
        JR      NC,D4_ALL
        ENDIF
;
        EX      AF,AF'
D4_LP1:
        LD      A,(HL)
        INC     HL
        RES     2,H
        LD      (DE),A
        INC     DE
        RES     2,D
        INC     B
        JR      NZ,D4_LP1
        EX      AF,AF'
;
D4_FLAG:
;
;On recupere FLAGs et pointeur donnees compressees
;(B inutilise)
;
        EXX
        POP     BC
        POP     HL
;
;
;On extrait nouveau flag
;
D4_NEXT:
        SLA     C
        JR      NZ,D4_FLGOK
;
        LD      C,(HL)
        INC     HL
        DB      #CB,#31 ; SLL C
D4_FLGOK:
        JR      NC,D4_CHR
;
;Test similaire au precedent
;
        LD      B,(HL)
        INC     HL
        LD      D,A     ; Sauve pour D4_LEFT
        ADD     A,B
        JR      NC,D4_LEFT
;
;Il restera (A+1) donnees a fournir apres copie de la chaine
;
        EX      AF,AF'
        LD      A,B
        EXX
        LD      B,A
        EXX
        LD      A,(HL)
        INC     HL
        EXX
        IF      WANTLOOP
        ADD     A,C
        LD      L,A
        LD      A,D
        RES     0,A
        RES     1,A
        EXX
        ADC     A,(HL)
        DB      #DD
        ADD     A,H
        AND     #FB
        ELSE
        LD      L,A
        LD      A,D
        AND     #FC
        EXX
        OR      (HL)
        ENDIF
        INC     HL
        EXX
        LD      H,A
D4_LP2:
        LD      A,(HL)
        INC     HL
        RES     2,H
        LD      (DE),A
        INC     DE
        RES     2,D
        INC     B
        JR      NZ,D4_LP2
        EX      AF,AF'
        EXX
        JR      D4_NEXT
;
D4_LEFT:
;
;Idem que D4_ALL mais sur moins de donnees.
;
        EX      AF,AF'  ; Pour l'instant on conserve A-B
        LD      A,D     ; Nombre de valeur restantes a copier-1
        EXX
        LD      B,A
        INC     B
        EXX
        LD      A,(HL)
        INC     HL
        EXX
        IF      WANTLOOP
        ADD     A,C
        LD      L,A
        LD      A,D
        RES     0,A
        RES     1,A
        EXX
        ADC     A,(HL)
        DB      #DD
        ADD     A,H
        AND     #FB
        ELSE
        LD      L,A
        LD      A,D
        AND     #FC
        EXX
        OR      (HL)
        ENDIF
        INC     HL
        PUSH    HL
        PUSH    BC
        EXX
        LD      H,A
D4_LP3:
        LD      A,(HL)
        INC     HL
        RES     2,H
        LD      (DE),A
        INC     DE
        RES     2,D
        DJNZ    D4_LP3
        EX      AF,AF'
        LD      B,A
        INC     B       ; Longueur restante pour prochaine fois
        PUSH    BC
;
        PUSH    HL
        PUSH    DE
        JP      (IY)
;
        IF      WANTLOOP
D4_AL_:
;
;  D0_ALL ne convient pas quand on veut changer dynamiquement le nombre
;  de valeurs a recuperer (c'est le cas pour le bouclage).
;
        INC     A
        LD      B,A
        PUSH    BC
        EXX
        LD      A,D
        EXX
        LD      B,A
        INC     B
;
D4_AL_LP:       LD      A,(HL)
        LD      (DE),A
        INC     HL
        RES     2,H
        INC     DE
        RES     2,D
        DJNZ    D4_AL_LP
;
        PUSH    HL
        PUSH    DE
        JP      (IY)
;
        ELSE
;
D4_ALL:
;
;La chaine a copier fournie toutes les donnees
;
        INC     A
        LD      B,A     ; Longueur restante pour prochaine fois
        PUSH    BC
;
D4_COPY:        LD      A,(HL)
        LD      (DE),A
        INC     HL
        RES     2,H
        INC     DE
        RES     2,D
        DS      154     ; Place pour NBR_REG copies
        DS      5       ; Place pour D0_MODEL
;
D4_MODEL:               ;       Sera copie a la suite des LDI
        PUSH    HL
        PUSH    DE
        JP      (IY)
D4_MODE_:
;
        ENDIF
;
;
READHEAD:
;
;On va   analyser le header
;
        LD      HL,(DUREE)
        LD      (MESURE+1),HL
;
        RET
;
;
ATTRIBU:
;
;On reparti les tampons de decompressions. Ceux de #400 de long se placent
;     en #?000 ou #?800 pour faciliter le modulo, et la routine intercale
;ceux de #100 dans les trous (pile poil).
;
;On place d'abord ceux de #400
;
        LD      HL,OFBUF0
        LD      D,DECRUBUF/#100
        EXX
        LD      HL,(ADRTEMP)
        INC     HL
        INC     HL      ; Flag Decomp400 ou Decomp100
        PUSH    HL
        LD      DE,3
        LD      A,(NBR_REG)
        LD      B,A     ; B=cpt loop, C = nbr de buffer400
        LD      C,0
ATT_LP:
        LD      A,(HL)
        CP      1
        JR      Z,ATT_BUF1
        EXX
        LD      (HL),D
        INC     HL
        LD      (HL),4
        DEC     HL
        LD      A,D
        ADD     A,8
        LD      D,A
        EXX
        INC     C
ATT_BUF1:
        EXX
        INC     HL
        INC     HL
        EXX
        ADD     HL,DE
        DJNZ    ATT_LP
;
;Maintenant on va placer les buffer100
;
        LD      HL,OFBUF0
        LD      D,DECRUBUF/#100
        LD      B,3                     ;Pour intercaler 4 buffer100
        EXX
        POP     HL
        PUSH    HL
        LD      DE,3
        LD      A,(NBR_REG)
        LD      B,A
ATT_LP2:
        LD      A,(HL)
        CP      4       ; On l'a deja traite
        JR      Z,ATT_BUF4
        EXX
        LD      A,B
        INC     A
        AND     3
        LD      B,A
        JR      NZ,ATT_OK       ; On est pas sur une adr congrue a #400
        LD      A,C
        OR      A
        JR      Z,ATT_OK        ; On a passe tout les buffer #100
        DEC     C
        LD      A,D     ; Sinon on saute buffer #400
        ADD     A,4
        LD      D,A
ATT_OK: LD      (HL),D
        INC     HL
        LD      (HL),1
        DEC     HL
        INC     D
        EXX
ATT_BUF4:
        EXX
        INC     HL
        INC     HL
        EXX
        ADD     HL,DE
        DJNZ    ATT_LP2
;
;Un dernier passage pour passer les bons JUMP
;
        LD      HL,VROUT+1
        LD      BC,VROUT_-VROUT-1
        EXX
        POP     HL
        LD      DE,3
        LD      A,(NBR_REG)
        LD      B,A
ATT_LP3:
        LD      A,(HL)
        CP      1
        EXX
        LD      DE,DECOMP0
        JR      Z,ATT_R1
        LD      DE,DECOMP4
ATT_R1:
        LD      (HL),E
        INC     HL
        LD      (HL),D
        ADD     HL,BC
        EXX
        ADD     HL,DE
        DJNZ    ATT_LP3
        RET
;
POKECODE:
;
;Code bon nombre de LDIs dans routines de decompression
;
        IF      WANTLOOP
        ELSE
;
        LD      A,(NBR_REG)
        DEC     A
        SLA     A
        SLA     A
        LD      C,A
        LD      B,0
        LD      HL,D0_COPY
        LD      DE,D0_COPY+4
        LDIR
        LD      HL,D0_MODEL
        LD      BC,D0_MODE_-D0_MODEL
        LDIR
;
        LD      A,(NBR_REG)
        DEC     A
        SLA     A
        SLA     A
        SLA     A
        LD      C,A
        LD      B,0
        LD      HL,D4_COPY
        LD      DE,D4_COPY+8
        LDIR
        LD      HL,D4_MODEL
        LD      BC,D4_MODE_-D4_MODEL
        LDIR
;
        ENDIF
        RET
;
CREEPLAY:
;
;Cree routine PLAYREG suivant taille des BUFFERS
;
        LD      HL,OFBUF0
        LD      DE,PLAYCODE
;
        LD      B,(HL)  ; Poids fort du 1er tampon
        INC     HL
        LD      A,(HL)  ; Taille
        INC     HL
        CP      1
        CALL    Z,CP_1
        CALL    NZ,CP_4
;
        LD      B,13    ; 13 premiers registre
CP_LP:
        PUSH    BC
        CALL    CP_COPY
;
        LD      B,(HL)
        INC     HL
        LD      A,(HL)
        CP      4
        CALL    Z,CP_4
        JR      Z,CP_SUI
;
;on verifie si buffer precedent etait de taille 1,
;et s'il etait place cote @ cote, pour pouvoir mettre  INC L
;
        DEC     HL
        DEC     HL
        CP      (HL)
        CALL    NZ,CP_1
        JR      NZ,CP_SUI0
;
        DEC     HL
        LD      A,(HL)  ; Adr precedente buffer
        INC     HL
        SUB     B
        INC     A
        CALL    Z,CP_1INC
        CALL    NZ,CP_1
CP_SUI0:
        INC     HL
        INC     HL
;
CP_SUI:
        INC     HL
        POP     BC
        DJNZ    CP_LP
;
;le registre 13 a un traitement different
;on le joue meme en cas de valeur identique, sauf si c'est #FF
;
        EX      DE,HL
        LD      (HL),#7E        ; LD A,(HL)
        INC     HL
        LD      (HL),#3C        ; INC A
        INC     HL
        LD      (HL),#28        ; JR Z,
        INC     HL
        LD      (HL),MO_SAME-MO_SUITE+1
        INC     HL
        LD      (HL),#3D        ; DEC A
        INC     HL
        EX      DE,HL
;
        LD      HL,MO_SUITE
        LD      BC,MO_END-MO_SUITE
        LDIR
;
        DEC     DE      ; On ecrase dernier INC C
        LD      HL,MO2
        LD      BC,MO2_END-MO2
        LDIR
;
        RET
;
;
CP_COPY:
;
;On copie partie OUTs
;
        PUSH    HL
        LD      HL,MODELE
        LDI             ; LD A,(HL)
        LDI             ; CP 0
        LD      B,D     ; on stocke nn...
        LD      C,#FF   ; Pour que LDI ne modifisse pas B !
        LD      A,E
        LDI
        LDI             ; JR Z,MO_SAME
        LDI
        LDI             ; LD (nn),A
        LD      (DE),A  ; ...et ici on copie nn !
        INC     DE
        LD      A,B
        LD      (DE),A
        INC     DE
;
CP_COPY2:
        LD      HL,MO_SUITE
        LD      BC,MO_END-MO_SUITE
        LDIR
        POP     HL
        RET
;
;
CP_1:
;
;Si tampon de taille #100 on code
;    LD   H,n
;
        EX      DE,HL
        LD      (HL),#26
        INC     HL
        LD      (HL),B
        INC     HL
        EX      DE,HL
        RET
;
CP_1INC:
;
;Quand 2 tampon de taille #100 successif, on code
;    INC  H
;
        LD      A,#24
        LD      (DE),A
        INC     DE
        RET
;
CP_4:
;
;Si c'est un tampon de taille #400, on code
;     LD   A,n
;     OR   D
;     LD   H,A
;
        EX      DE,HL
        LD      (HL),#3E
        INC     HL
        LD      (HL),B
        INC     HL
        LD      (HL),#B2
        INC     HL
        LD      (HL),#67
        INC     HL
        EX      DE,HL
        RET
;
RAZVAR:
;
;Toutes les auto-modifs pour la gestion
;
        LD      HL,VMESURE
        LD      (GETWITCH+1),HL
        IF      WANTLOOP
        LD      HL,V0
        LD      (GETWITC_+1),HL
        XOR     A
        LD      (DECALEH+1),A
        ENDIF
        LD      HL,0
        LD      (PLAYPLAG+1),HL
;
        CALL    SETVAR
;
        LD      HL,REGS                 ; On copier variable pour reset/bouclage
        LD      DE,REGSCOPY
        LD      BC,16*10
        LDIR
;
        RET
;
;
SETVAR:
;
;Init variables REGS pour la decompression.
;
        LD      HL,OFBUF0
        EXX
        LD      A,(NBR_REG)
        LD      B,A             ; Nombre registres traites
        LD      DE,(ADRTEMP)    ; Pointe sur donnees (en relatif)
        INC     DE
        INC     DE      ; Saute "longueur"
        LD      HL,REGS
RAZLOOP
        PUSH    BC
;
;On place adr DEST
;
        EXX
        LD      A,(HL)
        INC     HL
        INC     HL
        EXX
        LD      (HL),0
        INC     HL
        LD      (HL),A
        INC     HL
;;
;; Adr source pour copie chaine : forcement meme poids fort qd fenetre #100
;;
        INC     HL
        LD      (HL),A
        INC     HL
;;
;; Valeur decalage (quand boucle, les donnees ne sont plus placees a partir de 0,
;les references absolues doivent etre corrigees)
;;
        LD      (HL),0
        INC     HL
;
;On place nbr de chr restant a copier = 0
;
        LD      (HL),0
        INC     HL
;
;Octet flag a #40 pour copie 1er octet et enclencher lecture nouveaux flags
;
        LD      (HL),#40
        INC     HL
        INC     HL
;
;Maintenant il faut lire adr debut donnees compresses,
;donnees en relatif par rapport a position courante dans header
;
        EX      DE,HL
        INC     HL      ; On saute type compression
        LD      C,(HL)
        INC     HL
        LD      B,(HL)
;
        PUSH    HL
        ADD     HL,BC
        LD      B,H
        LD      C,L
        POP     HL
;
        INC     HL
        EX      DE,HL
        LD      (HL),C
        INC     HL
        LD      (HL),B
        INC     HL
;
        POP     BC
        DJNZ    RAZLOOP
        RET
;
;
;
STORE
        LD      BC,#7FC5        ; Sauve DAMS
        OUT     (C),C
        LD      HL,#800
        LD      DE,#4000
        LD      BC,#3800
        LDIR
        RET
;
;
;
RESTORE
        LD      BC,#7FC6
        OUT     (C),C
        LD      HL,#4000
        LD      DE,#3000
        LD      BC,#1000
        LDIR
        RET
;
;
;
VAR                     ; Variables de travail
;
REGS    DS      16*10   ;Variables pour chaque registre
REGSCOPY        DS      16*10   ;Pour reset lors du bouclage
;
;; Pour chaque registre, on a :
;;
;; Adresse destination     (DE)
;; Adresse source chaine   (HL)  ne sert pas forcement
;; Flag/compteur chaine    (BC)  C : poids faible decalage
;; Octet flags             (BC') B' inutilise
;; Source data compresses  (HL')
;
DATA
;
;NBR_REG est une constante qui permet de determiner combien recuperer
;de donnees a la fois. Si NBR_REG = 14, on recupere 14 donnees par registre et
;par VBL. Au bout de 14 VBL, on peut jouer 14 fois tous les reg., le temps de
;recuperer 14*14 nouvelles donnees.
;
NBR_REG DB      14      ;!!! MODIFIER (V14-2) EN CONSEQUENCE !!
;
;
ADRTEMP DW      YMLZ
;
;
;
OFBUF0  DB      #C0     ;Poids fort adresse
        DB      4       ; Taille (1 ou 4) pour CREEPLAY
;
;Attention les tampons de #400 doivent commencer en #x000 ou #x800
;
        DB      #C4,1,#C8,4,#C5,1,#D0,4
        DB      #C6,1,#C7,1,#CC,1,#CD,1
        DB      #CE,1,#CF,1,#D4,1,#D5,1
        DB      #D6,1,#D7,1,#D8,1



Haut
 Profil  
 
hERMOL
 Sujet du message : Re: utilisation KITAY
Message Publié : 27 Mai 2008, 21:04 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
je déplace le sujet dans la section "Coding" ..


Haut
 Profil  
 
MIC
 Sujet du message : Re: utilisation KITAY
Message Publié : 01 Juin 2008, 11:39 
Hors-ligne
VIP
VIP

Inscription : 07 Nov 2007, 21:36
Message(s) : 433
quand j'assemble le source tel qu'il est sur winape j'ai ça

http://cpccrackers.free.fr/CPCRULEZ/bug.PNG


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: utilisation KITAY
Message Publié : 02 Juin 2008, 04:19 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
c'est le bug "incbin" de winape v2.0a15 , verifie bien que le .ay est dans le dossier de la source , ou alors pointe le fichier .ay avec la path au complet ...

.. sinon c'est peut-être le write qui fait chier, rajout un deuxieme ";" devant ton write "a:...."


Haut
 Profil  
 
MIC
 Sujet du message : Re: utilisation KITAY
Message Publié : 02 Juin 2008, 15:55 
Hors-ligne
VIP
VIP

Inscription : 07 Nov 2007, 21:36
Message(s) : 433
en sortant le .bin du disk ,et le mettant dans le mème dossier ça fonctionne.... le INCBIN n'aime pas le "a:foft.bin" :)


Haut
 Profil  
 
cmp
 Sujet du message : Re: utilisation KITAY
Message Publié : 25 Juil 2008, 01:02 
Hors-ligne
VIP
VIP

Inscription : 29 Août 2007, 09:29
Message(s) : 49
Localisation : lille
la routine refaite par hermol est celle utilisée dans la synergy 2 ;)

merci hermol :)

_________________
CMP FROM IMPACT


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 2
 [ 26 message(s) ]  Aller vers la page 1, 2  Suivant

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 53 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.