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
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
ça doit etre trop simple ...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..
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]
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
Inscription : 20 Août 2007, 18:21 Message(s) : 5103
voilà , sans la routine de chargement ("LOAD") et 101% compatible WINAPE ...
fichier binaire du .AY ( .YM convertis ) placé en &7600 -> label "YMLZ"
BON CODE !
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
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:...."
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