12000
GAME -> Reflexion
© cpc-power.com (2015)
 
 
 
4 To 4 Back To The Future
cpc
 
 

Last Update : Saturday 09 January 2016 at 20 h 40

MANUAL n° 1

188.99 Ko
Manual n° 1 in PDF format
Informations en anglais (10 pages)

Manual n° 2

Real size : 1653 * 1002 px = 219.66 Ko

Manual n° 3

;************************* ;*** OVERSCAN DE DEBUT *** ;************************* ORG #A300 DI ;MODE 1 LD A,1 CALL &BC0E ;largeur a zero (masque l'écran) LD BC,&BC01 OUT (C),C LD BC,&BD00 OUT (C),C ;BORDER 11 (Bleu) LD BC,&0B0B CALL &BC38 ;INK 0,0 (Noir) XOR A LD BC,&0000 CALL &BC32 ;INK 1,11 (Bleu) LD A,1 LD BC,&0B0B CALL &BC32 ;INK 2,15 (Orange) LD A,2 LD BC,&0F0F CALL &BC32 ;INK 3,26 (Blanc) LD A,3 LD BC,&1A1A CALL &BC32 ;chargement du fichier LD B,&0C LD HL,fichier_overscan LD DE,&C000 CALL &BC77 ;LD HL,&01FE ;normal LD HL,&01F0 ;version compressée CALL &BC83 CALL &55C6 ;décompression ;correction du soucis de compression avec Zenith 2 (1er octet de mangé) LD a,&F0 LD (&01FE),a ;correction du problème avec convimgcpc (overscan FIN) LD A,&F1 LD (&07FE),a LD (&07FF),a LD A,&F4 LD (&0FFE),a LD (&0FFF),a LD A,&F1 LD (&17FE),a LD (&17FF),a LD A,&F4 LD (&1FFE),a LD (&1FFF),a LD A,&F1 LD (&27FE),a LD (&27FF),a LD A,&F4 LD (&2FFE),a LD (&2FFF),a LD A,&F1 LD (&37FE),a LD (&37FF),a LD A,&F4 LD (&3FFE),a LD (&3FFF),a ;OUT overscan ;largeur LD BC,&BC01 OUT (C),C LD BC,&BD30 OUT (C),C ;hauteur LD BC,&BC06 OUT (C),C ;LD BC,&BD22 LD BC,&BD00 OUT (C),C ;decalage horizontal LD BC,&BC02 OUT (C),C LD BC,&BD32 OUT (C),C ;decalage vertical LD BC,&BC07 OUT (C),C LD BC,&BD23 OUT (C),C ;ecran 32 ko (&000 a &7FFF) LD BC,&BC0C OUT (C),C LD BC,&BD0C OUT (C),C ;debut offset (en &01FE) LD BC,&BC0D OUT (C),C LD BC,&BDFF OUT (C),C ;animation sur la hauteur R6 = 0 a 34 LD BC,&BC06 OUT (C),C LD B,&BD LD A,34 LD C,0 OUT (C),C .anim2 INC C OUT (C),C ;ralentissement CALL &BD19 CALL &BD19 CALL &BD19 CALL &BD19 CALL &BD19 CALL &BD19 CALL &BD19 CALL &BD19 DEC A CP 0 JP NZ,anim2 ;attente de l'appuie d'une touche CALL &BB06 ;animation sur la largeur R1 = 48 a 0 LD BC,&BC01 OUT (C),C LD B,&BD LD A,47 LD C,47 OUT (C),C .anim1 DEC C OUT (C),C ;ralentissement CALL &BD19 CALL &BD19 CALL &BD19 CALL &BD19 DEC A CP 0 JP NZ,anim1 ;OUT normal ;largeur LD BC,&BC01 OUT (C),C LD BC,&BD28 OUT (C),C ;hauteur LD BC,&BC06 OUT (C),C LD BC,&BD19 OUT (C),C ;decalage horizontal LD BC,&BC02 OUT (C),C LD BC,&BD2E OUT (C),C ;decalage vertical LD BC,&BC07 OUT (C),C LD BC,&BD1E OUT (C),C ;ecran 17 ko (&C00 a &FFFF) LD BC,&BC0C OUT (C),C LD BC,&BD3C OUT (C),C ;debut offset (en &C000) LD BC,&BC0D OUT (C),C LD BC,&BD00 OUT (C),C ;vider la mémoire LD HL,&01FE LD DE,&01FF LD BC,&8000 LD (HL),0 LDIR EI RET fichier_overscan : ;DEFM "OVER1 .SCR" ;normal 32 ko DEFM "OVER1 .SCA" ;compressée 22 ko ;*********************** ;*** OVERSCAN DE FIN *** ;*********************** ORG #A000 DI ;MODE 1 LD A,1 CALL &BC0E ;VERIFIER QU'ON A LE DROIT DE VOIR LA FIN LD a,(&BE80) CP &01 JP Z,VOIRFIN ;non autorisé ;remplir la mémoire de zéro de &01F0 a &9FFF LD HL,&01F0 LD DE,&01F1 LD BC,&9E0F LD (HL),0 LDIR ;deformation de l'écran pour voir uniquement 4 lignes sur toutes la largeur ;largeur LD BC,&BC01 OUT (C),C ;LD BC,&BD30 LD BC,&BD32 OUT (C),C ;hauteur LD BC,&BC06 OUT (C),C LD BC,&BD04 OUT (C),C ;decalage horizontal LD BC,&BC02 OUT (C),C LD BC,&BD33 OUT (C),C ;decalage vertical LD BC,&BC07 OUT (C),C LD BC,&BD15 OUT (C),C ;affichage text ;BORDER 3 (Rouge foncé, Rouge vif) LD BC,&0306 CALL &BC38 ;INK 0,26 (Blanc) XOR A LD BC,&1A1A CALL &BC32 ;INK 1,0 (Noir) LD A,1 LD BC,&0000 CALL &BC32 LD a,1 CALL &BB90 ; PEN 1 CALL routinetexte .nepasredonnerlamain JR nepasredonnerlamain RET .routinetexte LD H,1 LD L,1 CALL &BB75 ;LOCATE H,L LD HL,letexte .boucletexte LD A,(HL) CP 0 RET Z CALL &BB5A INC HL JR boucletexte .letexte DEFM " " DEFM " WARNING " DEFM " YOU NEED TO FINISH ALL LEVELS - DON'T CHEAT " nop .VOIRFIN ;BORDER 11 (Bleu) LD BC,&0B0B CALL &BC38 ;INK 0,0 (Noir) XOR A LD BC,&0000 CALL &BC32 ;INK 1,11 (Bleu) LD A,1 LD BC,&0B0B CALL &BC32 ;INK 2,15 (Orange) LD A,2 LD BC,&0F0F CALL &BC32 ;INK 3,26 (Blanc) LD A,3 LD BC,&1A1A CALL &BC32 ;largeur a zero (masque l'écran) LD BC,&BC01 OUT (C),C LD BC,&BD00 OUT (C),C ;DEPLACER la musique en &C000 LD HL,&382F LD DE,&C000 LD BC,&0E98 LDIR ;décompression overscan CALL &37DD ;correction du soucis de compression avec Zenith 2 (1er octet de mangé) LD a,&F0 LD (&01FE),a ;correction du problème avec convimgcpc (overscan FIN) LD A,&F5 LD (&07FE),a LD (&07FF),a LD (&0FFE),a LD (&0FFF),a LD (&17FE),a LD (&17FF),a LD (&1FFE),a LD (&1FFF),a LD (&27FE),a LD (&27FF),a LD (&2FFE),a LD (&2FFF),a LD (&37FE),a LD (&37FF),a ;OUT overscan ;largeur LD BC,&BC01 OUT (C),C ;LD BC,&BD30 LD BC,&BD00 OUT (C),C ;hauteur LD BC,&BC06 OUT (C),C LD BC,&BD22 OUT (C),C ;decalage horizontal LD BC,&BC02 OUT (C),C LD BC,&BD32 OUT (C),C ;decalage vertical LD BC,&BC07 OUT (C),C LD BC,&BD23 OUT (C),C ;ecran 32 ko (&000 a &7FFF) LD BC,&BC0C OUT (C),C LD BC,&BD0C OUT (C),C ;debut offset (en &01FE) LD BC,&BC0D OUT (C),C LD BC,&BDFF OUT (C),C ;animation sur la largeur R1 = 0 a 48 LD BC,&BC01 OUT (C),C LD B,&BD LD A,47 LD C,1 OUT (C),C .anim1 INC C OUT (C),C ;ralentissement CALL &BD19 CALL &BD19 CALL &BD19 CALL &BD19 DEC A CP 0 JP NZ,anim1 ;initialiser la musique CALL &C000 .loopzic CALL &BD19 CALL &C006 JP loopzic RET

Manual n° 4

;*************** ;*** VUMETRE *** ;*************** ORG &5400 DI ;position courante x,y CALL &BBC6 push de push hl CALL lirelescanaux CALL afficheVUMETRE ;restaurer la position courante ;(évite le bug avec le rectangle qui entoure le slider) pop hl pop de CALL &BBC0 EI RET .blockevenement ds 10 ;stocker les valeurs des 3 canaux (A, B, C) .valuecanaux ds 3 .lirelescanaux LD B,&03 LD HL,valuecanaux .LIRECANAUX PUSH BC LD A,B ADD &07 LD C,A LD B,&74 OUT (C),C LD B,&76 IN A,(C) OR &C0 OUT (C),A AND &30 OUT (C),A LD BC,&F792 OUT (C),C LD C,A PUSH BC DEC B OR &40 OUT (C),A IN A,(&F4) AND &0F LD (HL),A POP BC LD A,&82 OUT (C),A DEC B OUT (C),C INC HL POP BC DJNZ LIRECANAUX RET .afficheVUMETRE ;*********************** ;*** affiche CANAL A *** ;*********************** ;barre 1 - effacer LD A,2 CALL &BBDE ;pen 2 LD DE,476 ;x LD HL,364 ;y CALL &BBEA ;plot x,y,2 LD DE,0 ;x LD HL,30 ;y CALL &BBF9 ;drawr x,y,2 ;barre 1 - afficher LD A,1 CALL &BBDE ;pen 1 LD DE,476 ;x LD HL,364 ;y CALL &BBEA ;plot x,y,1 LD A,(valuecanaux) ;la valeur de notre canal (&00 a &0F) ADD A,A ;A*2 LD DE,0 ;x LD HL,0 ;y LD L,A ;y=a CALL &BBF9 ;drawr x,VOL*2,1 ;*********************** ;*** affiche CANAL B *** ;*********************** ;barre 1 - effacer LD A,2 CALL &BBDE ;pen 2 LD DE,476+12 ;x LD HL,364 ;y CALL &BBEA ;plot x,y,2 LD DE,0 ;x LD HL,30 ;y CALL &BBF9 ;drawr x,y,2 ;barre 1 - afficher LD A,1 CALL &BBDE ;pen 1 LD DE,476+12 ;x LD HL,364 ;y CALL &BBEA ;plot x,y,1 LD A,(valuecanaux+1) ;la valeur de notre canal (&00 a &0F) ADD A,A ;A*2 LD DE,0 ;x LD HL,0 ;y LD L,A ;y=a CALL &BBF9 ;drawr x,VOL*2,1 ;*********************** ;*** affiche CANAL C *** ;*********************** ;barre 1 - effacer LD A,2 CALL &BBDE ;pen 2 LD DE,476+24 ;x LD HL,364 ;y CALL &BBEA ;plot x,y,2 LD DE,0 ;x LD HL,30 ;y CALL &BBF9 ;drawr x,y,2 ;barre 1 - afficher LD A,1 CALL &BBDE ;pen 1 LD DE,476+24 ;x LD HL,364 ;y CALL &BBEA ;plot x,y,1 LD A,(valuecanaux+2) ;la valeur de notre canal (&00 a &0F) ADD A,A ;A*2 LD DE,0 ;x LD HL,0 ;y LD L,A ;y=a CALL &BBF9 ;drawr x,VOL*2,1 RET ;****************** ;*** EDITOR.RSX *** ;****************** ORG &A000 ;WRITE "EDITOR.RSX" Hauteur_du_tile EQU 16 longueur_tableau EQU 16 hauteur_tableau EQU 11 ecran_tableau EQU &C000 gfx_des_tiles EQU &9900 resultat_target1 EQU &A600 resultat_target2 EQU &A601 resultat_target3 EQU &A602 resultat_target4 EQU &A603 resultat_slider1 EQU &A604 resultat_slider2 EQU &A605 resultat_slider3 EQU &A606 resultat_slider4 EQU &A607 ; **************************** ; *** RSX - INITIALISATION *** ; **************************** .RSX_Init : LD HL,RSX_Init LD (HL),&C9 ; Ecrire un RET pour empêcher une nouvelle initialisation LD BC,RSX_Commandes ; BC pointe sur la table des Commandes RSX LD HL,RSX_Tampon ; HL pointe sur 4 octets libres. JP &BCD1 .RSX_Tampon : DEFS 4 ; Tampon de quatre octets. .RSX_Commandes : DEFW RSX_Mots_Clefs ; Adresse des mots clefs JP TILES_AFF JP LEVEL_AFF JP TARGET_SLIDER_CHECK .RSX_Mots_Clefs DEFB "TIL","E"+&80 ; Mot clef avec le bit 7 du dernier caractere a 1. DEFB "LEVE","L"+&80 DEFB "CHEC","K"+&80 DEFB 0 ; Fin de la table. ; ********************* ; *** LES FONCTIONS *** ; ********************* ;syntax |TILE,adresse_ecran,adresse_tiles .TILES_AFF ;lecture valeur adresse_tiles LD L,(IX+00) LD H,(IX+01) ;lecture valeur adresse_ecran LD E,(IX+02) LD D,(IX+03) .TILES_1 LD A,Hauteur_du_tile .TILES_2 LDI ;16 pixels = 4 octets en MODE 1 LDI LDI LDI EX DE,HL LD BC,&07FC ADD HL,BC JR NC,TILES_3 LD BC,&C050 ADD HL,BC .TILES_3 EX DE,HL DEC A JR NZ,TILES_2 RET ;syntax |LEVEL,adresse_niveau .LEVEL_AFF ;lecture valeur adresse_niveau LD L,(IX+00) LD H,(IX+01) PUSH HL ;Sauver HL dans la Pile POP IX ;Restaurer la Pile dans IX LD DE,ecran_tableau LD A,hauteur_tableau .aff_tableau3 PUSH AF PUSH DE ; on sauvegarde l'adresse video de la premiere ligne de sprites a afficher LD A,longueur_tableau .aff_tableau2 PUSH AF LD A,(IX+&00) INC IX LD L,A LD H,0 ADD HL,HL ; x2 ADD HL,HL ; x4 ADD HL,HL ; x8 ADD HL,HL ; x16 ADD HL,HL ; x32 ADD HL,HL ; x64 LD BC,gfx_des_tiles ADD HL,BC PUSH DE CALL TILES_1 POP DE .aff_tableau1 INC DE ;Case suivante (decalage de 4 octets sur la droite) INC DE INC DE INC DE POP AF DEC A JR NZ,aff_tableau2 POP HL LD BC,&00A0 ADD HL,BC EX DE,HL ;Ligne suivante POP AF DEC A JR NZ,aff_tableau3 RET ;syntax |CHECK,adresse_niveau .TARGET_SLIDER_CHECK ;Mise a zero des resultats LD HL,resultat_target1 LD DE,resultat_target1+1 LD BC,&07 ;LG LD (HL),&00 ;valeur a ecrire LDIR ;lecture valeur adresse_niveau LD L,(IX+00) LD H,(IX+01) LD C,16*11 .LOOPCHECK LD A,(HL) PUSH HL CP &01 CALL Z,TARGET1 CP &02 CALL Z,TARGET2 CP &03 CALL Z,TARGET3 CP &04 CALL Z,TARGET4 CP &05 CALL Z,SLIDER1 CP &06 CALL Z,SLIDER2 CP &07 CALL Z,SLIDER3 CP &08 CALL Z,SLIDER4 DEC C POP HL INC HL JR NZ,LOOPCHECK RET .TARGET1 LD HL,resultat_target1 INC (HL) RET .TARGET2 LD HL,resultat_target2 INC (HL) RET .TARGET3 LD HL,resultat_target3 INC (HL) RET .TARGET4 LD HL,resultat_target4 INC (HL) RET .SLIDER1 LD HL,resultat_slider1 INC (HL) RET .SLIDER2 LD HL,resultat_slider2 INC (HL) RET .SLIDER3 LD HL,resultat_slider3 INC (HL) RET .SLIDER4 LD HL,resultat_slider4 INC (HL) RET

Manual n° 5

;****************** ;*** RSX ingame *** ;****************** ORG &9FC1 ;WRITE "INGAME.RSX" Hauteur_du_tile EQU 16 longueur_tableau EQU 16 hauteur_tableau EQU 11 ecran_tableau EQU &F0A1 gfx_des_tiles EQU &9861 niveau_courant EQU &9EA2 ;9FB8 = level le plus haut fini resultat_target1 EQU &9FB9 resultat_target2 EQU &9FBA resultat_target3 EQU &9FBB resultat_target4 EQU &9FBC resultat_slider1 EQU &9FBD resultat_slider2 EQU &9FBE resultat_slider3 EQU &9FBF resultat_slider4 EQU &9FC0 ; **************************** ; *** RSX - INITIALISATION *** ; **************************** .RSX_Init : LD HL,RSX_Init LD (HL),&C9 ; Ecrire un RET pour empêcher une nouvelle initialisation LD BC,RSX_Commandes ; BC pointe sur la table des Commandes RSX LD HL,RSX_Tampon ; HL pointe sur 4 octets libres. JP &BCD1 .RSX_Tampon : DEFS 4 ; Tampon de quatre octets. .RSX_Commandes : DEFW RSX_Mots_Clefs ; Adresse des mots clefs JP TILES_AFF JP LEVEL_AFF JP START_AFF JP RESET_SAV JP DECOR_SAV JP DECOR_AFF JP SPRITE_AFF JP LEVEL_CLEAR JP CART_PRS JP CART_INFO JP RECT_INFO JP BOUCHES JP CLS3 .RSX_Mots_Clefs DEFB "TIL","E"+&80 ; Mot clef avec le bit 7 du dernier caractere a 1. DEFB "LEVE","L"+&80 DEFB "STAR","T"+&80 DEFB "RESETDAT","A"+&80 DEFB "DECORSAV","E"+&80 DEFB "DECORAF","F"+&80 DEFB "SPRIT","E"+&80 DEFB "LEVELCLEA","R"+&80 DEFB "CAR","T"+&80 DEFB "INF","O"+&80 DEFB "REC","T"+&80 DEFB "BLABL","A"+&80 DEFB "CLS","3"+&80 DEFB 0 ; Fin de la table. ; ********************* ; *** LES FONCTIONS *** ; ********************* ;syntax |TILE,adresse_ecran,adresse_tiles .TILES_AFF ;lecture valeur adresse_tiles LD L,(IX+00) LD H,(IX+01) ;lecture valeur adresse_ecran LD E,(IX+02) LD D,(IX+03) .TILES_1 LD A,Hauteur_du_tile .TILES_2 LDI ;16 pixels = 4 octets en MODE 1 LDI LDI LDI EX DE,HL LD BC,&07FC ADD HL,BC JR NC,TILES_3 LD BC,&C050 ADD HL,BC .TILES_3 EX DE,HL DEC A JR NZ,TILES_2 RET ;syntax |LEVEL .LEVEL_AFF ;adresse_niveau LD IX,niveau_courant LD DE,ecran_tableau LD A,hauteur_tableau .aff_tableau3 PUSH AF PUSH DE ; on sauvegarde l'adresse video de la premiere ligne de sprites a afficher LD A,longueur_tableau .aff_tableau2 PUSH AF LD A,(IX+&00) INC IX LD L,A LD H,0 ADD HL,HL ; x2 ADD HL,HL ; x4 ADD HL,HL ; x8 ADD HL,HL ; x16 ADD HL,HL ; x32 ADD HL,HL ; x64 LD BC,gfx_des_tiles ADD HL,BC PUSH DE CALL TILES_1 POP DE .aff_tableau1 INC DE ;Case suivante (decalage de 4 octets sur la droite) INC DE INC DE INC DE POP AF DEC A JR NZ,aff_tableau2 POP HL LD BC,&00A0 ADD HL,BC EX DE,HL ;Ligne suivante POP AF DEC A JR NZ,aff_tableau3 RET ;syntax |START,adresse_niveau_dans_le_pack .START_AFF ;lecture valeur adresse_niveau LD L,(IX+00) LD H,(IX+01) LD DE,niveau_courant LD BC,176 ;16x11 LDIR ;transfeert des données ;affichage du niveau ;CALL LEVEL_AFF ;calcul positions target et slider ;suppression des valeurs des sliders dans le tableau LD HL,niveau_courant LD C,176 ;16x11 .LOOPCHECK LD A,(HL) PUSH HL CP &01 CALL Z,TARGET1 CP &02 CALL Z,TARGET2 CP &03 CALL Z,TARGET3 CP &04 CALL Z,TARGET4 CP &05 CALL Z,SLIDER1 CP &06 CALL Z,SLIDER2 CP &07 CALL Z,SLIDER3 CP &08 CALL Z,SLIDER4 DEC C POP HL INC HL JR NZ,LOOPCHECK ;affichage du niveau LD HL,niveau_courant LD DE,niveau_courant CALL LEVEL_AFF RET .TARGET1 ;position LD a,c LD (resultat_target1),a XOR A RET .TARGET2 ;position LD a,c LD (resultat_target2),a XOR A RET .TARGET3 ;position LD a,c LD (resultat_target3),a XOR A RET .TARGET4 ;position LD a,c LD (resultat_target4),a XOR A RET .SLIDER1 ;position LD a,c LD (resultat_slider1),a ;mise a zéro XOR A LD (HL),a RET .SLIDER2 ;position LD a,c LD (resultat_slider2),a ;mise a zéro XOR A LD (HL),a RET .SLIDER3 ;position LD a,c LD (resultat_slider3),a ;mise a zéro XOR A LD (HL),a RET .SLIDER4 ;position LD a,c LD (resultat_slider4),a ;mise a zéro XOR A LD (HL),a RET ;syntax |RESETDATA .RESET_SAV LD HL,&9F53 LD DE,&9F54 LD BC,100 ;101 valeurs LD (HL),0 LDIR RET ;syntax |LEVELCLEAR .LEVEL_CLEAR LD HL,niveau_courant LD DE,niveau_courant+1 LD BC,(16*11)-1 LD (HL),0 LDIR RET ;***************************** ;*** gestion des 4 sprites *** ;***************************** .fond_Tampon1 : DEFS 64 ; MODE 1 : 16px*16px = 4*16 = 64 octets .fond_Tampon2 : DEFS 64 .fond_Tampon3 : DEFS 64 .fond_Tampon4 : DEFS 64 .DECOR_SAV ;syntax |DECORSAVE,slider,adresse_ecran ;lecture slider LD A,(IX+02) ;lecture adresse_ecran LD E,(IX+00) LD D,(IX+01) ;HL adresse pour sauver CP &05 CALL Z,FOND_SLIDER1 CP &06 CALL Z,FOND_SLIDER2 CP &07 CALL Z,FOND_SLIDER3 CP &08 CALL Z,FOND_SLIDER4 LD A,Hauteur_du_tile EX DE,HL .sauver_fond1 LDI ; 16 pixels = 4 octets en MODE 1 LDI LDI LDI LD BC,&7FC ADD HL,BC JR NC,sauver_fond2 LD BC,&C050 ADD HL,BC .sauver_fond2 DEC A JR NZ,sauver_fond1 RET .DECOR_AFF ;syntax |DECORAFF,slider,adresse_ecran ;lecture slider LD A,(IX+02) ;lecture adresse_ecran LD E,(IX+00) LD D,(IX+01) ;HL adresse pour sauver CP &05 CALL Z,FOND_SLIDER1 CP &06 CALL Z,FOND_SLIDER2 CP &07 CALL Z,FOND_SLIDER3 CP &08 CALL Z,FOND_SLIDER4 LD A,Hauteur_du_tile .restore_fond1 LDI ; 16 pixels = 4 octets en MODE 1 LDI LDI LDI EX DE,HL LD BC,&7FC ADD HL,BC JR NC,restore_fond2 LD BC,&C050 ADD HL,BC .restore_fond2 EX DE,HL DEC A JR NZ,restore_fond1 RET .FOND_SLIDER1 LD HL,fond_Tampon1 RET .FOND_SLIDER2 LD HL,fond_Tampon2 RET .FOND_SLIDER3 LD HL,fond_Tampon3 RET .FOND_SLIDER4 LD HL,fond_Tampon4 RET ;syntax |SPRITE,slider(adresse_memoire),adresse_ecran .SPRITE_AFF ;lecture valeur adresse_ecran LD E,(IX+02) LD D,(IX+03) ;lecture valeur adresse_tiles/sprite LD L,(IX+00) LD H,(IX+01) ;EX DE,HL ; en inversant HL et DE, on peut gagner sur le calcul final de ligne suivante. LD A,Hauteur_du_tile .aff_sp0 DI ;desactiver les interruptions (a cause du EX AF,AF') EX AF,AF' ; traitement premier octet LD A,(DE) LD B,A AND &88 ; pixel 4 JR NZ,aff_sp11 LD A,(HL) AND &88 .aff_sp11 LD C,A ; on sauvegarde dans C le pixel traite LD A,B AND &44 JR NZ,aff_sp12 LD A,(HL) AND &44 .aff_sp12 ADD A,C LD C,A LD A,B AND &22 JR NZ,aff_sp13 LD A,(HL) AND &22 .aff_sp13 ADD A,C LD C,A LD A,B AND &11 JR NZ,aff_sp14 LD A,(HL) AND &11 .aff_sp14 ADD A,C LD (HL),A ; on poke en memoire video le resultat final INC HL INC DE ; traitement deuxieme octet LD A,(DE) LD B,A AND &88 ; pixel 4 JR NZ,aff_sp21 LD A,(HL) AND &88 .aff_sp21 LD C,A ; on sauvegarde dans C le pixel traite LD A,B AND &44 JR NZ,aff_sp22 LD A,(HL) AND &44 .aff_sp22 ADD A,C LD C,A LD A,B AND &22 JR NZ,aff_sp23 LD A,(HL) AND &22 .aff_sp23 ADD A,C LD C,A LD A,B AND &11 JR NZ,aff_sp24 LD A,(HL) AND &11 .aff_sp24 ADD A,C LD (HL),A ; on poke en memoire video le resultat final INC HL INC DE ; traitement troisieme octet LD A,(DE) LD B,A AND &88 ; pixel 4 JR NZ,aff_sp31 LD A,(HL) AND &88 .aff_sp31 LD C,A ; on sauvegarde dans C le pixel traite LD A,B AND &44 JR NZ,aff_sp32 LD A,(HL) AND &44 .aff_sp32 ADD A,C LD C,A LD A,B AND &22 JR NZ,aff_sp33 LD A,(HL) AND &22 .aff_sp33 ADD A,C LD C,A LD A,B AND &11 JR NZ,aff_sp34 LD A,(HL) AND &11 .aff_sp34 ADD A,C LD (HL),A ; on poke en memoire video le resultat final INC HL INC DE ; traitement quatrieme octet LD A,(DE) LD B,A AND &88 ; pixel 4 JR NZ,aff_sp41 LD A,(HL) AND &88 .aff_sp41 LD C,A ; on sauvegarde dans C le pixel traite LD A,B AND &44 JR NZ,aff_sp42 LD A,(HL) AND &44 .aff_sp42 ADD A,C LD C,A LD A,B AND &22 JR NZ,aff_sp43 LD A,(HL) AND &22 .aff_sp43 ADD A,C LD C,A LD A,B AND &11 JR NZ,aff_sp44 LD A,(HL) AND &11 .aff_sp44 ADD A,C LD (HL),A ; on poke en memoire video le resultat final INC DE LD BC,&7FD ADD HL,BC JR NC,aff_sp5 LD BC,&C050 ADD HL,BC aff_sp5 EX AF,AF' DEC A JP NZ,aff_sp0 EI ;réactiver les interruptions RET ;syntax |CART .CART_PRS LD DE,&F8AD LD HL,&9C21 CALL TILES_1 ;coin haut gauche LD DE,&F14D LD HL,&9DA1 CALL TILES_1 ;coin bas gauche LD DE,&F8CD LD HL,&9B61 CALL TILES_1 ;coin haut droit LD DE,&F16D LD HL,&9CE1 CALL TILES_1 ;coin bas droit ;Utilisation de la zone graphique comme d'un FILL ;bord gauche et droit ld de,130 ld hl,368 call #BBCF ;bord haut et bas ld de,351 ld hl,294 call #BBD2 ;couleur du paper ld a,2 call #BBE4 ;cls fenetre graphique call #BBDB ;parametre par defaut pour la zone graphique ;bord gauche et droit ld de,0 ld hl,640 call #BBCF ;bord haut et bas ld de,0 ld hl,400 call #BBD2 ;refaire le trait blanc ;PEN 1 ld a,1 call #BBDE ;plot ld de,128 ;x ld hl,344 ;y call #BBEA ;draw ld de,374 ld hl,344 call #BBF6 ;plot ld de,128 ;x ld hl,346 ;y call #BBEA ;draw ld de,374 ld hl,346 call #BBF6 ;plot ld de,128 ;x ld hl,348 ;y call #BBEA ;draw ld de,374 ld hl,348 call #BBF6 RET ;syntax |INFO .CART_INFO LD DE,&F329 LD HL,&9BA1 CALL TILES_1 ;coin gauche LD DE,&F355 LD HL,&9AE1 CALL TILES_1 ;coin droit ;Utilisation de la zone graphique comme d'un FILL ;bord gauche et droit ;104;225 ;423;198 ld de,104 ld hl,423 call #BBCF ;bord haut et bas ld de,225 ld hl,198 call #BBD2 ;couleur du paper ld a,2 call #BBE4 ;cls fenetre graphique call #BBDB ;parametre par defaut pour la zone graphique ;bord gauche et droit ld de,0 ld hl,640 call #BBCF ;bord haut et bas ld de,0 ld hl,400 call #BBD2 RET ;syntax |RECT .RECT_INFO ;Utilisation de la zone graphique comme d'un FILL ;bord gauche et droit ld de,148-16 ld hl,366+16 call #BBCF ;bord haut et bas ld de,160 ld hl,238 call #BBD2 ;couleur du paper ld a,0 ;NOIR call #BBE4 ;cls fenetre graphique call #BBDB ;Utilisation de la zone graphique comme d'un FILL ;bord gauche et droit ld de,148-8 ld hl,366+8 call #BBCF ;bord haut et bas ld de,160+8 ld hl,238-8 call #BBD2 ;couleur du paper ld a,3 ;BLEU call #BBE4 ;cls fenetre graphique call #BBDB ;Utilisation de la zone graphique comme d'un FILL ;bord gauche et droit ld de,148 ld hl,366 call #BBCF ;bord haut et bas ld de,160+16 ld hl,238-16 call #BBD2 ;couleur du paper ld a,1 ;BLANC call #BBE4 ;cls fenetre graphique call #BBDB ;Utilisation de la zone graphique comme d'un FILL ;bord gauche et droit ld de,148+8 ld hl,366-8 call #BBCF ;bord haut et bas ld de,160+24 ld hl,238-24 call #BBD2 ;couleur du paper ld a,3 ;BLEU call #BBE4 ;cls fenetre graphique call #BBDB ;parametre par defaut pour la zone graphique ;bord gauche et droit ld de,0 ld hl,640 call #BBCF ;bord haut et bas ld de,0 ld hl,400 call #BBD2 RET ;syntax |BLABLA .valbouche DEFB 0 .BOUCHES LD A,(valbouche) CP &00 CALL Z,BOUCHE1 CP &01 CALL Z,BOUCHE2 RET .BOUCHE1 ;changer 8 valeurs LD A,&0F LD (&E3B8),A LD (&E3B9),A LD (&FBB8),A LD (&FBB9),A LD A,&F0 LD (&EBB8),A LD (&F3B8),A LD A,&E1 LD (&EBB9),A LD (&F3B9),A ;on change pour le prochain appel LD A,1 LD (valbouche),A ;en sortant de cette sous-routine on évite d'aller dans la suivante LD A,7 RET .BOUCHE2 ;changer 8 valeurs LD A,&F0 LD (&E3B8),A LD (&FBB8),A LD A,&E1 LD (&E3B9),A LD (&FBB9),A XOR A LD (&EBB8),A LD (&F3B8),A LD A,&01 LD (&EBB9),A LD (&F3B9),A ;on change pour le prochain appel XOR A LD (valbouche),A RET ;syntax |CLS3 ;petit effet pour vider l'écran du dernier niveau .CLS3 LD HL,&C000 LD BC,&4000 clsloop2: LD (HL),&FF;remplir avec l'encre 3 (bleu) LD DE,&0059 ADD HL,DE JR NC,clsloop1 LD DE,&C000 ADD HL,DE clsloop1: DEC BC LD A,B OR C JR NZ,clsloop2 RET


Goto Top
CPC-POWER/CPCSOFTS, programming by Kukulcan © 2007-2023 all rights reserved.
Reproduction forbidden without any express authorization. All the game titles used belong to their respective owners.
Hébergement Web, Mail et serveurs de jeux haute performance