13000
GAME -> Reflexion
© cpc-power.com (2016)
 
 
 
Virusdog
cpc
 
 

Last Update : Tuesday 08 August 2017 at 22 h 52

MANUAL n° 1

270.72 Ko
Manual n° 1 in PDF format
Informations et programmation (38 pages)

MANUAL n° 2

260.68 Ko
Manual in ZIP format
Source

Manual n° 3

Real size : 1653 * 981 px = 249.66 Ko

Manual n° 4

;******************************************* ;*** POUR CREATION FICHIER BASIC/BINAIRE *** ;******************************************* ORG #0260 DI LD HL,&0280 LD DE,&6000 LD BC,&196C LDIR CALL &6000 ;afficher l'image CALL &77BC ;afficher les rasters EI RET ;fin &0274 ;chargement du fichier IMAGE + RASTER ORG #A000 LD B,&0C LD HL,fichier_ecran LD DE,&C000 CALL &BC77 ;lecture entete LD HL,&0280 CALL &BC83 ;lecture fichier CALL &BC7A ;ferme le fichier ;fichier raster LD B,&0C LD HL,fichier_raster LD DE,&C000 CALL &BC77 ;lecture entete LD HL,&1A3C CALL &BC83 ;lecture fichier CALL &BC7A ;ferme le fichier ;sauvegarde du nouveau fichier BASIC/BINAIRE LD B,&0C LD HL,fichier_sortie LD DE,&C000 CALL &BC8C LD HL,&0170 ;'debut basic LD DE,&1A80 ;longueur du fichier LD BC,&FADA ;'adresse execution XOR A ;fichier Basic CALL &BC98 CALL &BC8F CALL &BC89 CALL &BC92 RET fichier_ecran : DEFM "MENU .EC1" fichier_raster : DEFM "RASTER .BIN" fichier_sortie : DEFM "DISC .BAS" ;******************************************************************** ;*** MENU *** ;************ tailleraster1 EQU 26 tailleraster2 EQU 20 ORG &77BC DI ; Desactiver les interruptions LD HL,(&38) ; Lire l'ancienne interruption LD (Sauver),HL ; Sauvegarder la valeur 16 bits LD HL,&C9FB ; Registre 16 bits EI (&FB) + RET (&C9) LD (&38),HL ; Ecrire en &0038 et &0039 le contenu du registre HL EI ; Interruption autorisees .Programme ;raster1b rotation vers le bas LD A,(Raster1b+tailleraster1-1) LD HL,Raster1b+tailleraster1-2 LD DE,Raster1b+tailleraster1-1 LD BC,tailleraster1-1 LDDR LD (Raster1b),A ;raster 2 rotation vers le haut LD A,(Raster2) LD HL,Raster2+1 LD DE,Raster2 LD BC,tailleraster2-1 LDIR LD (Raster2+tailleraster2-1),A LD B,&F5 ; Se connecter au PPI/8255 port B accessible via &F5xx .Balayage IN A,(C) ; Lire le contenu RRA ; On teste si le bit 0 = 1 JP NC,Balayage ; Si le bit 0 = 0 on boucle jusqu'a la fin du balayage ; On est en haut de l'ecran, on peut continuer le programme HALT ; Attendre interruption 1 HALT ; Attendre interruption 2 DS 20 ; 20 nop - pour une position en debut de ligne LD B,&7F ; On selection le Gate Array LD HL,Raster ; HL pointe sur la table de couleurs .BoucleRaster LD a,(hl) ; On charge la couleur dans A CP &00 ; Si A=0 alors JP Z,Touche ; Saut au test clavier LD C,16 OUT (C),C ; Selection du border OUT (C),A ; Ecrire la couleur LD C,2 OUT (C),C ; Selection encre 2 OUT (C),A ; Ecrire la couleur INC HL ; Couleur suivante dans le tableau DS 32 ; On attend la fin de la ligne... (32 nops) JP BoucleRaster ; Test touche .Touche LD BC,&F40E OUT (C),C ;[PIO A] PSG -> Select Reg14 LD BC,&F6C0 ;PPI I/O OUT (C),C XOR A OUT (C),A LD BC,&F792 ;PPI I/O C Control OUT (C),C LD BC,&F645 ;PPI I/O C - &45 = ligne 5 OUT (C),C LD B,&F4 ;PPI I/O A - lire ligne clavier IN A,(C) LD BC,&F782 ;PPI I/O C Control OUT (C),C LD BC,&F600 ;PPI I/O C OUT (C),C RLA ;Rotation a gauche - bit 7 (touche ESPACE) RLA ;Rotation a gauche - bit 6 (touche N) JR NC,ToucheN ;Si la touche N est enfoncee on quit RLA ;Rotation a gauche - bit 5 (touche J) RLA ;Rotation a gauche - bit 4 (touche H) RLA ;Rotation a gauche - bit 3 (touche Y) JP C,Programme ;Si la touche Y n'est pas enfoncee on boucle .ToucheY LD A,1 LD (&BE80),A ;Ecrire 1 en &BE80 CALL Restaurer RET .ToucheN LD A,2 LD (&BE80),A ;Ecrire 2 en &BE80 CALL Restaurer RET .Restaurer DI ; Desactiver les interruptions LD HL,(Sauver) ; Restauration des anciennes interruptions LD (&38),hl ; Ecrire EI ; Interruption autorisees RET ; Retour .Sauver DW #0000 ;Sauvegarde valeur 16 bits .Raster ;&54 noir &44 bleu &55 bleu vif &5C rouge fonce &58 magenta &5D mauve ;&4C rouge vif &45 pourpre &4D magenta vif &56 vert &46 turquoise &57 bleu ciel ;&5E jaune &40 gris &5F bleu pastel &4E orange &47 rose &4F magenta pastel ;&52 vert vif &42 vert marin &53 turquoise vif &5A vert citron &59 vert pastel &5B turquoise pastel ;&4A jaune vif &43 jaune pastel &4B blanc DB &5F ;border bleu pastel .Raster1 ;zone fixe DB &58 ;magenta DB &5F ;bleu pastel DB &58,&58 ;magenta DB &5F ;bleu pastel DB &58,&58,&58 ;magenta DB &4D,&4D ;magenta vif DB &58 ;magenta DB &4D,&4D,&4D ;magenta vif DB &4F ;magenta pastel DB &4D,&4D ;magenta vif DB &4F,&4F ;magenta pastel .Raster1b DB &56 ;vert DB &5A,&5A,&5A ;vert citron DB &56 ;vert DB &5A,&5A ;vert citron DB &4A ;jaune vif DB &43,&43 ;jaune pastel DB &42,&42 ;vert marin DB &4B ;blanc ;zone fixe DB &4B ;blanc DB &42,&42 ;vert marin DB &43,&43 ;jaune pastel DB &4A ;jaune vif DB &5A,&5A ;vert citron DB &56 ;vert DB &5A,&5A,&5A ;vert citron DB &56 ;vert DB &4F,&4F ;magenta pastel DB &4D,&4D ;magenta vif DB &4F,&4F ;magenta pastel DB &4D,&4D ;magenta vif DB &4F ;magenta pastel DB &4D,&4D,&4D ;magenta vif DB &58 ;magenta DB &4D,&4D ;magenta vif DB &58,&58,&58 ;magenta DB &5F ;bleu pastel DB &58,&58 ;magenta DB &5F ;bleu pastel DB &58 ;magenta DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F DB &5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F,&5F .Raster2 DB &5C ;rouge fonce DB &4C,&4C ;rouge vif DB &4E,&4E ;orange DB &4A,&4A ;jaune vif DB &43,&43 ;jaune pastel DB &4B,&4B ;blanc DB &43,&43 ;jaune pastel DB &4A,&4A ;jaune vif DB &4E,&4E ;orange DB &4C,&4C ;rouge vif DB &5C ;rouge fonce DB &5F ;border bleu pastel DB 0 ;fin

Manual n° 5

;******************************************* ;*** POUR CREATION FICHIER BASIC/BINAIRE *** ;******************************************* ORG #3F19 DI LD HL,&2E98 LD DE,&A000 LD BC,&01DF LDIR LD HL,&3078 LD DE,&C000 LD BC,&0EA0 LDIR EI RET ORG #A000 ;chargement du fichier OVERSCAN LD B,&0C LD HL,fichier_overscan LD DE,&C000 CALL &BC77 ;lecture entete LD HL,&01F0 CALL &BC83 ;lecture fichier CALL &BC7A ;ferme le fichier ;chargement du fichier ANIMATION LD B,&0C LD HL,fichier_animation LD DE,&C000 CALL &BC77 ;lecture entete LD HL,&2E98 CALL &BC83 ;lecture fichier CALL &BC7A ;ferme le fichier ;chargement du fichier MUSIQUE LD B,&0C LD HL,fichier_musique LD DE,&C000 CALL &BC77 ;lecture entete LD HL,&3078 CALL &BC83 ;lecture fichier CALL &BC7A ;ferme le fichier ;sauvegarde du nouveau fichier BASIC/BINAIRE LD B,&0C LD HL,fichier_sortie LD DE,&C000 CALL &BC8C LD HL,&0170 ;'debut basic LD DE,&3DDD ;longueur du fichier LD BC,&FADA ;'adresse execution XOR A ;fichier Basic CALL &BC98 CALL &BC8F CALL &BC89 CALL &BC92 RET fichier_overscan : DEFM "INTRO .SCA" fichier_animation : DEFM "INTRO .BIN" fichier_musique : DEFM "INTRO .MUS" fichier_sortie : DEFM "DISC .BAS" ;**************************************************************************************** ;*** OVERSCAN INTRO AVEC MUSIQUE *** ;*********************************** ORG #A000 DI ;MODE 1 ;LD A,1 ;CALL &BC0E ;BORDER 0 (Noir) LD BC,&0000 CALL &BC38 ;INK 0,0 (Noir) XOR A LD BC,&0000 CALL &BC32 ;INK 1,3 (Rouge fonce) LD A,1 LD BC,&0303 CALL &BC32 ;INK 2,14 (Bleu) LD A,2 LD BC,&0E0E 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 ;compacte ;CALL &BC83 CALL &2E46 ;decompactage ;correction du probleme avec Zenith II (1er octet mange) LD A,&5A LD (&1FE),a ;correction du probleme avec convimgcpc (8x8 absent) LD A,&33 LD (&07FE),a LD (&07FF),a LD A,&CC LD (&0FFE),a LD (&0FFF),a LD A,&33 LD (&17FE),a LD (&17FF),a LD A,&CC LD (&1FFE),a LD (&1FFF),a LD A,&33 LD (&27FE),a LD (&27FF),a LD A,&CC LD (&2FFE),a XOR A LD (&2FFF),a LD A,&33 LD (&37FE),a XOR A LD (&37FF),a LD A,&CC LD (&3FFE),a LD A,&88 LD (&3FFF),a ;OUT overscan ;largeur LD BC,&BC01 OUT (C),C LD BC,&BD30 OUT (C),C ;hauteur (&22) LD BC,&BC06 OUT (C),C LD BC,&BD0B ;11 lignes texte uniquement 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 CALL tempo ;petite animation pour centrer le titre ;animation sur R7 = &23 a &18 LD BC,&BC07 OUT (C),C LD B,&BD LD A,&23-&18 ;Dec 11 fois LD C,&23 OUT (C),C .anim1 DEC C OUT (C),C ;ralentissement CALL &BD19:CALL &BD19:CALL &BD19 DEC A CP 0 JP NZ,anim1 CALL tempo ;petite animation pour positionner le titre tout en bas ;animation sur R7 = &18 a &C LD BC,&BC07 OUT (C),C LD B,&BD LD A,&18-&C ;DEC nb fois LD C,&18 OUT (C),C .anim2 DEC C OUT (C),C ;ralentissement CALL &BD19:CALL &BD19:CALL &BD19 DEC A CP 0 JP NZ,anim2 ;CALL tempo ;petite animation pour remonter le titre ;animation sur R7 = &C a &23 LD BC,&BC07 OUT (C),C LD B,&BD LD A,&17 ;INC nb fois LD C,&C OUT (C),C .anim3 INC C OUT (C),C ;ralentissement CALL &BD19:CALL &BD19:CALL &BD19 DEC A CP 0 JP NZ,anim3 ;CALL tempo ;animation sur R6 = &B a &22 LD BC,&BC06 OUT (C),C LD B,&BD LD A,&17 LD C,&B OUT (C),C .anim4 INC C OUT (C),C ralentissement PUSH AF CALL tempo2 POP AF DEC A CP 0 JP NZ,anim4 ;transfert musique en C000 ;LD HL,&8000 ;LD DE,&C000 ;LD BC,&0EA0 ;LDIR ;Init musique CALL &C000 loop: CALL &BD19 ;attente debut balayage CALL &C006 ;joueur musique LD A,&2F ;barre d'espace CALL &BB1E CP &80 JP Z,exit JP loop exit: CALL &BCA7 ;nettoyage queue sonore ;animation sur la hauteur R6 = &22 a 0 (masquer) LD BC,&BC06 OUT (C),C LD B,&BD LD A,&22 LD C,&22 OUT (C),C .anim5 DEC 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,anim5 ;OUT R1=32 R6=0 (On masque reste masque) ;largeur LD BC,&BC01 OUT (C),C LD BC,&BD20 OUT (C),C ;hauteur LD BC,&BC06 OUT (C),C LD BC,&BD0 OUT (C),C ;decalage horizontal LD BC,&BC02 OUT (C),C LD BC,&BD2A OUT (C),C ;decalage vertical LD BC,&BC07 OUT (C),C LD BC,&BD22 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 ;effacer l'ecran CALL &BB6C EI RET tempo2: LD A,8 LOOPtempo2: CALL &BD19 DEC A CP 0 JP NZ,LOOPtempo2 RET ;ralentissement tempo: LD A,&A0 LOOPtempo: CALL &BD19 DEC A CP 0 JP NZ,LOOPtempo RET ;fichier_overscan : ;DEFM "INTRO .SCA" ;32 ko

Manual n° 6

ADRSCORE EQU &A000 TILESFONTE EQU &7078 ;adr = &67E0 + recompense (4*3*11 = 132) + chiffres (10*2*11 = 220) + vide/mur/virus (14*6*22 = 1848) ORG &9000 ; Kukulcan 2016 ; **************************** ; *** RSX - INITIALISATION *** ; **************************** .RSX_Init : LD HL,RSX_Init LD (HL),&C9 ; Ecrire un RET pour empecher 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 CONV_LINEAIRE JP AFF_CIBLE JP AFF_SPRITE JP OUT40 JP OUT32 JP MENU JP ROUTINEHIST JP ROUTINECONTROLS JP ROUTINECREDIT JP MSG JP SCORECLEAN JP STATS JP FX JP AFFRESULT JP TILE8 JP CLS .RSX_Mots_Clefs DEFB "CON","V"+&80 DEFB "CIBL","E"+&80 DEFB "SP","R"+&80 DEFB "OUT4","0"+&80 DEFB "OUT3","2"+&80 DEFB "MEN","U"+&80 DEFB "AFFHIS","T"+&80 DEFB "AFFCTR","L"+&80 DEFB "AFFCREDIT","S"+&80 DEFB "MS","G"+&80 DEFB "SCORECLEA","N"+&80 DEFB "STAT","S"+&80 DEFB "F","X"+&80 DEFB "AFFRESUL","T"+&80 DEFB "TILE","8"+&80 DEFB "CL","S"+&80 DEFB 0 ; Fin de la table. ;syntax |CONV,adresse_ecran,adresse_destination,largeur,hauteur CONV_LINEAIRE ;lecture valeur hauteur LD A,(IX+0) LD (conv_hauteur+1),A ;lecture valeur largeur LD A,(IX+2) LD (conv_largeur+1),A ;lecture valeur adresse_destination LD D,(IX+5) LD E,(IX+4) ;lecture valeur adresse_ecran LD H,(IX+7) LD L,(IX+6) conv_hauteur: LD B,0 ;//nb de ligne (Hauteur) conv_infos: PUSH BC ;//ecrire BC dans la pile PUSH HL ;//ecrire HL dans la pile conv_largeur LD B,0 ;//largeur du sprite (en octet) conv_ligne: LD A,(HL) ;//a = valeur de l'octet a l'ecran LD (DE),A ;//ecrire dans destination la valeur de a INC DE ;//adresse de destination suivante INC HL ;//adresse ecran suivante DJNZ conv_ligne ;//B=B-1 si B est <> 0 alors on boucle sur ligne ;B=0, calculer l'adresse de la prochaine ligne a l'ecran POP HL ;//recuperer HL de la pile ;CALL &BC26 ;//Calcul ligne ecran suivante (vers le BAS) CALL conv_ligne_suivante POP BC ;//recuperer BC de la pile (C'est surtout pour le registre B ;//contenant le nombre de ligne que c'est interessant, vu qu'on ;//l'utilise 2 fois ce registre dans la routine) DJNZ conv_infos ;//B=B-1 si B <>0 on boucle dans infos RET ;//retour au basic, toutes les lignes ont ete traitees conv_ligne_suivante: LD A,H ADD A,#08 LD H,A RET NC LD BC,#C050 ADD HL,BC RET ;syntax |CIBLE,adresse_ecran,adresse_sprite,largeur,hauteur ;Routine de Christphe PETIT - Affichage d'un sprite entier avec transparence sur l'encre 0 en mode 1 .AFF_CIBLE ;lecture valeur hauteur LD A,(IX+0) LD (cible_hauteur+1),A ;lecture valeur largeur LD A,(IX+2) LD (cible_largeur+1),A ;lecture valeur adresse_sprite LD H,(IX+5) LD L,(IX+4) ;lecture valeur adresse_ecran LD D,(IX+7) LD E,(IX+6) cible_hauteur LD C,0 AFF_CIBLE1 PUSH DE cible_largeur LD B,0 ; B = nombre d'octets a copier par ligne AFF_CIBLE2 PUSH BC LD A,(HL) ; A = octet courant du sprite LD C,A ; puis C RLCA RLCA RLCA RLCA ; Inversion poids faible <-> poids fort OR C ; A = masque des couleurs de sprite a conserver CPL ; inversion pour masque des couleurs de fond a supprimer LD B,A ; B = masque des couleurs a supprimer LD A,(DE) ; A = octet de fond d'ecran courant AND B ; suppression des couleurs genantes OR C ; ajout des couleurs du sprite LD (DE),A ; affichage du resultat INC HL INC DE POP BC DJNZ AFF_CIBLE2 ; Rebouclage jusqu'a traitement complet de la ligne POP DE PUSH BC CALL ligne_suivante_suivant_R1 POP BC DEC C JR NZ,AFF_CIBLE1 RET ;syntax |FX,valeur (0 ou 1) .FX LD A,(IX+0) LD C,8 ;la parenthese ouverte commence a la position 8 ADD C LD L,A ;L = A LD H,0 ;H = 0 ;HL contient A (A * 2*8=16) ADD HL,HL ;*2 ADD HL,HL ;*4 ADD HL,HL ;*8 ADD HL,HL ;*16 LD DE,TILESFONTE ADD HL,DE ;HL contient l'adresse du tiles LD A,8 LD (spr_hauteur+1),A LD A,2 LD (spr_largeur+1),A LD DE,&DF95 CALL spr_hauteur RET ;syntax |SPR,adresse_ecran,adresse_sprite,largeur,hauteur .AFF_SPRITE ;lecture valeur hauteur LD A,(IX+0) LD (spr_hauteur+1),A ;lecture valeur largeur LD A,(IX+2) LD (spr_largeur+1),A ;lecture valeur adresse_sprite LD H,(IX+5) LD L,(IX+4) ;lecture valeur adresse_ecran LD D,(IX+7) LD E,(IX+6) spr_hauteur LD A,&20 ;hauteur spr_loop PUSH AF PUSH DE spr_largeur LD BC,&0000 ;largeur LDIR POP DE CALL ligne_suivante_suivant_R1 POP AF DEC A JR NZ,spr_loop .ligne_suivante_suivant_R1 LD A,D ADD A,8 LD D,A AND &38 RET NZ LD A,D SUB &40 LD D,A LD A,E ADD A,&40 ;si R1=40 alors &50 si R1=41 alors &52 si R1=32 alors &40 LD E,A RET NC INC D LD A,D AND 7 RET NZ LD A,D SUB 8 LD D,A RET .OUT40 LD BC,&BC01 OUT(C),C LD BC,&BD00+40 OUT(C),C LD BC,&BC02 OUT(C),C LD BC,&BD00+46 OUT(C),C LD BC,&BC06 OUT(C),C LD BC,&BD00+25 OUT(C),C LD BC,&BC07 OUT(C),C LD BC,&BD00+30 OUT(C),C RET .OUT32 ;largeur LD BC,&BC01 OUT (C),C LD BC,&BD20 OUT (C),C ;hauteur LD BC,&BC06 OUT (C),C LD BC,&BD20 OUT (C),C ;decalage horizontal LD BC,&BC02 OUT (C),C LD BC,&BD2A OUT (C),C ;decalage vertical LD BC,&BC07 OUT (C),C LD BC,&BD22 OUT (C),C RET .MENU AFFICHAGE_MENU_PRINCIPAL LD HL,MENU0 LD DE,&D957 CALL directmini LD HL,MENU1 LD DE,&FA94 CALL directmini LD HL,MENU2 LD DE,&EB54 CALL directmini LD HL,MENU3 LD DE,&DC14 CALL directmini LD HL,MENU4 LD DE,&CCD4 CALL directmini LD HL,MENU5 LD DE,&FD54 CALL directmini LD HL,MENU6 LD DE,&EE08 CALL directmini RET MENU0 DEFB "*M*E*N*U*" DB 0 ;fin d'affichage MENU1 DEFB "1 - PLAY" DB 0 ;fin d'affichage MENU2 DEFB "2 - THE STORY" DB 0 ;fin d'affichage MENU3 DEFB "3 - CONTROLS" DB 0 ;fin d'affichage MENU4 DEFB "4 - CREDITS" DB 0 ;fin d'affichage MENU5 DEFB "5 - RESULTS" DB 0 ;fin d'affichage MENU6 DEFB "2016 @ WWW.CPC-POWER.COM" DB 0 ;fin d'affichage ROUTINEHIST LD HL,HIST0 LD DE,&D951 CALL directmini LD HL,HIST1 LD DE,&FA85+1 CALL directmini LD HL,HIST2 LD DE,&EB45+1 CALL directmini LD HL,HIST3 LD DE,&DC05+1 CALL directmini LD HL,HIST4 LD DE,&CCC5+1 CALL directmini LD HL,HIST5 LD DE,&FD45+1 CALL directmini LD HL,HIST6 LD DE,&EE05+1 CALL directmini RET ;012345678901234567890123456 HIST0 DEFB "**THE***STORY**" DB 0 ;fin d'affichage HIST1 DEFB "YOUR DOG W.CAMELOT IS ILL." DB 0 ;fin d'affichage HIST2 DEFB "VIRUSES ARE ATTACKING HIM." DB 0 ;fin d'affichage HIST3 DEFB "YOUR MISSION IS TO GET RID" DB 0 ;fin d'affichage HIST4 DEFB "OF THEM THROUGHOUT THE " DB 0 ;fin d'affichage HIST5 DEFB "50 LEVELS. BEWARE!!!" DB 0 ;fin d'affichage HIST6 DEFB " VIRUSES ARE CLEVER!!!" DB 0 ;fin d'affichage ROUTINECONTROLS LD HL,CTRL0 LD DE,&D94F CALL directmini LD HL,CTRL1 LD DE,&FA85+1 CALL directmini LD HL,CTRL2 LD DE,&EB45+1 CALL directmini LD HL,CTRL3 LD DE,&DC05+1 CALL directmini LD HL,CTRL4 LD DE,&CCC5+1 CALL directmini LD HL,CTRL5 LD DE,&FD45+1 CALL directmini LD HL,CTRL6 LD DE,&EE05+1 CALL directmini RET ;012345678901234567890123456 CTRL0 DEFB "*C*O*N*T*R*O*L*S*" DB 0 ;fin d'affichage CTRL1 DEFB "MOVE CURSOR AND VIRUS WITH" DB 0 ;fin d'affichage CTRL2 DEFB "JOYSTICK OR ARROW KEYS." DB 0 ;fin d'affichage CTRL3 DEFB " R=RESTART LEVEL " DB 0 ;fin d'affichage CTRL4 DEFB "A=ABORT GAME M=( OR )" DB 0 ;fin d'affichage CTRL5 DEFB "KILL EVERY VIRUS TO ACCESS" DB 0 ;fin d'affichage CTRL6 DEFB " TO THE NEXT LEVEL. " DB 0 ;fin d'affichage ROUTINECREDIT LD HL,CREDIT0 LD DE,&D951 CALL directmini LD HL,CREDIT1 LD DE,&FA85 CALL directmini LD HL,CREDIT2 LD DE,&EB45 CALL directmini LD HL,CREDIT3 LD DE,&DC05 CALL directmini LD HL,CREDIT4 LD DE,&CCC5 CALL directmini LD HL,CREDIT5 LD DE,&FD45 CALL directmini LD HL,CREDIT6 LD DE,&EE05 CALL directmini RET ;012345678901234567890123456 CREDIT0 DEFB "*C*R*E*D*I*T*S*" DB 0 ;fin d'affichage CREDIT1 DEFB " IDEA & CODE: KUKULCAN " DB 0 ;fin d'affichage CREDIT2 DEFB " GFX: KUKULCAN & CED " DB 0 ;fin d'affichage CREDIT3 DEFB " MUSIC: T&J/GPA " DB 0 ;fin d'affichage CREDIT4 DEFB " COVER & MANUAL: IXIEN " DB 0 ;fin d'affichage CREDIT5 DEFB "TESTERS: AST*GALAMOTH*LONE*" DB 0 ;fin d'affichage CREDIT6 DEFB " *MAXIT*C.PETIT*FREDOUILLE*" DB 0 ;fin d'affichage ; .AFFRESULT LD HL,AFFRES0 LD DE,&D951 CALL directmini ;cadre LD HL,resultligne LD DE,&D4D3 CALL directmini LD HL,&70C8 LD DE,&D513 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D513+22 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D553 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D553+22 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D593 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D593+22 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D5D3 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D5D3+22 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D613 CALL stats_aff_TILES_1 LD HL,&70C8 LD DE,&D613+22 CALL stats_aff_TILES_1 LD HL,resultligne LD DE,&D653 CALL directmini ;sprite LD A,40 LD (spr_hauteur+1),A LD A,20 LD (spr_largeur+1),A LD HL,&A1D0 LD DE,&D515 CALL spr_hauteur RET resultligne DEFB "%%%%%%%%%%%%" DB 0;fin d'affichage AFFRES0 DEFB "*R*E*S*U*L*T*S*" DB 0 ;fin d'affichage AFFICHAGE_MINI_TEXTE ; LD HL,TEXTE1 ; LD DE,&C000 ;adresse affichage a l'ecran ;le texte devra obligatoirement avoir un zero a la fin ;lecture valeur adresse_texte LD H,(IX+3) LD L,(IX+2) ;lecture valeur adresse_ecran LD D,(IX+1) LD E,(IX+0) directmini ;lecture valeur hauteur LD A,8 LD (spr_hauteur+1),A ;lecture valeur largeur LD A,2 LD (spr_largeur+1),A loop_affichage_mini_texte LD A,(HL) CP 0 RET Z LD C,32 SUB C ;A = A-32 PUSH HL ;sauver HL PUSH DE ;sauver DE ;CALL &BB5A LD L,A ;L = A LD H,0 ;H = 0 ;HL contient A (A * 2*8=16) ADD HL,HL ;*2 ADD HL,HL ;*4 ADD HL,HL ;*8 ADD HL,HL ;*16 LD DE,TILESFONTE ADD HL,DE ;HL contient l'adresse du tiles POP DE ;recuperer l'adresse d'affichage a l'ecran PUSH DE ;on resauve DE CALL spr_hauteur ;affichage du sprite POP DE ;on recupere INC DE INC DE ;position suivante a l'ecran +2 POP HL ;recuperer HL INC HL ;position caractere suivant JR loop_affichage_mini_texte ;syntax |MSG,numero_texte .MSG LD A,(IX+0) LD HL,adresse_messages-26 .msgloop LD DE,26 ADD HL,DE DEC A CP -1 JP NZ,msgloop LD DE,&D6C7 CALL directmini RET .adresse_messages ;"0123456789012345678901234" 25 caracteres + 1 a zero DEFB " EMPTY ":DB 0 ;0 DEFB " OBSTACLE ":DB 0 ;1 DEFB " VIRUS *BDCIRON* TYPE # ":DB 0 ;2 DEFB " VIRUS *PLISSKEN* TYPE # ":DB 0 ;3 DEFB " VIRUS *DECKARD* TYPE # ":DB 0 ;4 DEFB " VIRUS *XTRABET* TYPE # ":DB 0 ;5 DEFB " VIRUS *KALIDOR* TYPE # ":DB 0 ;6 DEFB " VIRUS *ZISQUIER* TYPE # ":DB 0 ;7 DEFB " VIRUS *BDCIRON* TYPE $ ":DB 0 ;8 DEFB " VIRUS *PLISSKEN* TYPE $ ":DB 0 ;9 DEFB " VIRUS *DECKARD* TYPE $ ":DB 0 ;10 DEFB " VIRUS *XTRABET* TYPE $ ":DB 0 ;11 DEFB " VIRUS *KALIDOR* TYPE $ ":DB 0 ;12 DEFB " VIRUS *ZISQUIER* TYPE $ ":DB 0 ;13 DEFB "WARNING, IT'S NOT A VIRUS":DB 0 ;14 DEFB "VIRUS SELECTED, MOVE NOW?":DB 0 ;15 DEFB " ILLEGAL MOVE ":DB 0 ;16 DEFB "WELL DONE VIRUS DESTROYED":DB 0 ;17 DEFB " VIRUS UNSELECTED ":DB 0 ;18 DEFB " ":DB 0 ;19 DEFB " WAIT FOR LEVEL RELOAD ":DB 0 ;20 DEFB " GAME ABORDED ":DB 0 ;21 DEFB " WELCOME TO VIRUSDOG ":DB 0 ;22 DEFB "***** LEVEL FINISHED ****":DB 0 ;23 DEFB " SCORES LOADED ":DB 0 ;24 DEFB " SCORES SAVED ":DB 0 ;25 DEFB " SCORES RESET ":DB 0 ;26 ;syntax |SCORECLEAN .SCORECLEAN LD HL,ADRSCORE LD DE,ADRSCORE+1 LD BC,150 ;(2 scores + 1 rank)*50 niveaux LD (HL),0 LDIR ;lvlunlock LD A,4 LD (ADRSCORE+151),A RET ;|STATS .STATS LD IX,stats_texte LD DE,&C20F ;affichage ecran LD A,11 ;nombre de ligne a afficher .stats_aff_3 PUSH AF PUSH DE ; on sauvegarde l'adresse video de la premiere ligne de sprites a afficher LD A,17 ;nombre de colonne a afficher .stats_aff_2 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 (largeur 2 octets x 8 lignes pour un tile en 8x8) LD BC,TILESFONTE-&200 ;(evite une soustraction sur A avec 32caracteres*2octets*8lignes) ADD HL,BC PUSH DE CALL stats_aff_TILES_1 POP DE .stats_aff_1 INC DE ;Case suivante (decalage de 2 octets sur la droite) INC DE POP AF DEC A JR NZ,stats_aff_2 POP HL LD BC,&0040 ;&50 = normal - R1=32 alors &40 ADD HL,BC EX DE,HL ;Ligne suivante POP AF DEC A JR NZ,stats_aff_3 RET ;syntax |tile8,adresse_memoire,adresse_ecran .TILE8 ;lecture valeur adresse_memoire LD H,(IX+3) LD L,(IX+2) ;lecture valeur adresse_ecran LD D,(IX+1) LD E,(IX+0) .stats_aff_TILES_1 LD A,8 ;Hauteur_du_tile .stats_aff_TILES_2 LDI LDI ;8 pixels = 2 octets en MODE 1 EX DE,HL LD BC,&07FE ;&800 - 2 octets (largeur ecran - largeur tiles) ADD HL,BC JR NC,stats_aff_TILES_3 LD BC,&C040 ;R1=40 alors &C050 (normal) - R1=32 alors &C040 (reduit) ADD HL,BC .stats_aff_TILES_3 EX DE,HL DEC A JR NZ,stats_aff_TILES_2 RET ;syntax |CLS,adresse_ecran,numero .CLS ;&5D10 effacement,1 ;&5D94 effacement,2 ;&5E18 effacement,3 ;&5E9C effacement,4 ;&5F20 effacement,5 ;&5FA4 effacement,6 LD A,(IX+0) LD HL,&5D10-132 .clsloop LD DE,132 ADD HL,DE DEC A CP -1 JP NZ,clsloop ;lecture valeur adresse_ecran LD D,(IX+3) LD E,(IX+2) ;ecriture valeur hauteur LD A,22 LD (cible_hauteur+1),A ;ecriture valeur largeur LD A,6 LD (cible_largeur+1),A ;lecture valeur adresse_sprite CALL cible_hauteur RET org #9F00 .stats_texte DEFB "%%%%%%%%%%%%%%%%%" DEFB "% *L*E*V*E*L*S* %" DEFB "%+++++++++++++++%" DEFB "%1-PERFECT % 00 %" DEFB "%++++++++++%++++%" DEFB "%2-GOOD % 00 %" DEFB "%++++++++++%++++%" DEFB "%3-BAD % 00 %" DEFB "%++++++++++%++++%" DEFB "%X-NOTHING % 00 %" DEFB "%++++++++++%++++%" DEFB 0


Goto Top
CPC-POWER/CPCSOFTS, programming by Kukulcan © 2007-2019 all rights reserved.
Reproduction forbidden without any express authorization. All the game titles used belong to their respective owners.