Logicielsmoto.com

Nous sommes le 28 Mar 2024, 09:56

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 33 messages ]  Aller à la page 1, 2, 3  Suivante
Auteur Message
 Sujet du message: Quizz: 5cube
MessagePosté: 18 Mai 2014, 12:42 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Bon, au départ j'étais parti vers le codage d'un jeu de la vie performant (en asm avec des astuces de codage de de la mort); mais devant le volume du boulot (plus de 10k d'asm) j'ai réduit mon ambition à un truc plus petit que voici:
Code:
****************************************
* debut  : $9000
* fin    : $907C
* taille : 125
****************************************

        org     $9000

init    fcb     $1A,$50,$5F,$CE,$40
        fcb     $00,$E7,$C0,$11,$83
        fcb     $5F,$68,$26,$F8,$6C
        fcb     $C8,$EB,$6C,$C8,$C3
        fcb     $CE,$40,$28,$37,$76
        fcb     $33,$C8,$D8,$36,$76
        fcb     $33,$C8,$30,$37,$76
        fcb     $33,$C8,$D8,$36,$76
        fcb     $33,$C8,$30,$37,$76
        fcb     $33,$C8,$D8,$36,$76
        fcb     $33,$C8,$30,$37,$76
        fcb     $33,$C8,$D8,$36,$76
        fcb     $33,$C8,$30,$37,$76
        fcb     $33,$C8,$D8,$36,$76
        fcb     $33,$C8,$30,$11,$83
        fcb     $5F,$40,$25,$C8,$A6
        fcb     $C4,$48,$86,$27,$69
        fcb     $C6,$4A,$2C,$FB,$A6
        fcb     $5F,$44,$86,$D8,$66
        fcb     $C6,$4C,$26,$FB,$EC
        fcb     $C8,$B0,$AA,$C4,$EA
        fcb     $41,$A8,$C8,$D8,$E8
        fcb     $C8,$D9,$ED,$C8,$D8
        fcb     $ED,$C1,$11,$83,$5F
        fcb     $68,$26,$E8,$20,$97

        end     init

Alors le quizz du jours est: qu'est ce que fait ce programme de 5^3=125 octets.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 18 Mai 2014, 13:18 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
Il réveille un forum endormi?

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 18 Mai 2014, 13:26 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
ca serait bien :) En tout ca il m'a maintenu éveillé hier soir...

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 18 Mai 2014, 13:29 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
l'effet est joli, avec 2 plans (dont un 2 fois plus rapide que l'autre) en mode 4 couleurs et une belle palette cela devrait rendre pas mal du tout non?

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 18 Mai 2014, 13:30 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Il y a un (petit) indice dans mon message de 14:26 :)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 18 Mai 2014, 23:09 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Je vois ce que ça fait, mais je ne sais pas s'il suffit de voir pour savoir. La vérité est-elle ailleurs ?

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 06:25 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
tout est présent sur cette page, mais l'indice est vraiment très très petit... :p

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 10:39 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Code:
                        ORG     $9000

  9000  1A 50           ORCC    #$50 =.F.I.... 
  * Efface l'écran + 1 ligne
  9002  5F              CLRB                   
  9003  CE 40 00        LDU     #$4000         
  9006  E7 C0           STB     ,U+             
  9008  11 83 5F 68     CMPU    #$5F68         
  900C  26 F8           BNE     $9006           
  * Sème la graine
  900E  6C C8 EB        INC     -21,U           
  9011  6C C8 C3        INC     -61,U           
  * Scroll vertical de l'écran vers le haut
  9014  CE 40 28        LDU     #$4028         
  9017  37 76           PULU    A,B,X,Y,S       
  9019  33 C8 D8        LEAU    -40,U           
  901C  36 76           PSHU    S,Y,X,B,A       
  901E  33 C8 30        LEAU    48,U           
  9021  37 76           PULU    A,B,X,Y,S       
  9023  33 C8 D8        LEAU    -40,U           
  9026  36 76           PSHU    S,Y,X,B,A       
  9028  33 C8 30        LEAU    48,U           
  902B  37 76           PULU    A,B,X,Y,S       
  902D  33 C8 D8        LEAU    -40,U           
  9030  36 76           PSHU    S,Y,X,B,A       
  9032  33 C8 30        LEAU    48,U           
  9035  37 76           PULU    A,B,X,Y,S       
  9037  33 C8 D8        LEAU    -40,U           
  903A  36 76           PSHU    S,Y,X,B,A       
  903C  33 C8 30        LEAU    48,U           
  903F  37 76           PULU    A,B,X,Y,S       
  9041  33 C8 D8        LEAU    -40,U           
  9044  36 76           PSHU    S,Y,X,B,A       
  9046  33 C8 30        LEAU    48,U           
  9049  11 83 5F 40     CMPU    #$5F40         
  904D  25 C8           BLO     $9017           
  * Scrolle la ligne invisible d'un bit vers la gauche
  904F  A6 C4           LDA     ,U             
  9051  48              ASLA                   
  9052  86 27           LDA     #$27           
  9054  69 C6           ROL     A,U             
  9056  4A              DECA                   
  9057  2C FB           BGE     $9054           
  * Scrolle la dernière ligne d'un bit vers la droite
  9059  A6 5F           LDA     -1,U           
  905B  44              LSRA                   
  905C  86 D8           LDA     #$D8           
  905E  66 C6           ROR     A,U             
  9060  4C              INCA                   
  9061  26 FB           BNE     $905E           
  * ligne-invisible = (avant-dernière-ligne | ligne-invisible) ^ dernière-ligne
  9063  EC C8 B0        LDD     -80,U           
  9066  AA C4           ORA     ,U             
  9068  EA 41           ORB     1,U             
  906A  A8 C8 D8        EORA    -40,U           
  906D  E8 C8 D9        EORB    -39,U           
  9070  ED C8 D8        STD     -40,U           
  9073  ED C1           STD     ,U++           
  9075  11 83 5F 68     CMPU    #$5F68         
  9079  26 E8           BNE     $9063           
  * Nouvel affichage
  907B  20 97           BRA     $9014           


                        END     $9000

Voilà grosso-modo le code commenté. Y a-t-il une conclusion philosophique à en tirer ? :voyons:

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 10:40 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Très bonne analyse du code (surtout la formule logique finale). Tu es sur la voie, mais je n'ajouterais point de mot supplémentaire pour expliquer, car tout est écrit dans mon message de 14:26 :W

sam (<=== il fait tourner en bourrique!)

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 19 Mai 2014, 10:44, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 10:44 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Messire, je n'en peux mais :D
Bon, tu remplis l'écran avec un seul point, c'est ça ?

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 10:51 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Non l'écran n'est pas rempli, mais fait apparaitre un motif qui quoique irrégulier est assez reconnaissable par les initiés. Et c'est d'ailleurs le caractère irrégulier sortant de règles régulières qui en fait toute la particularité du bout de code.

Coté TO c'est ennuyeux que le scroll d'une ligne ne puisse se faire en moins d'1VBL, du coup on voit une vague défiler à l'écran. C'est moche :( Si j'ajoute les tests sur $E7E7 la barre est stable au 1/3 inférieur de l'écran. C'est pas mieux non plus. J'ai vu que dans la ROM ils ne scrollent pas comme moi par bout de 8 octets à la fois, mais par 7 octets:
Code:
puls D,X,Y,DP
pshu D,X,Y,DP
leau 14,u
mais ca ne tombe pas juste pour la dernière ligne. Je n'ai pas fait le compte mais je pense que la suppression d'un LEA dans la solution de la ROM apporte une légère accélération mais pas suffisante pour descendre en dessous de la VBL. (et en plus ca dépasse le 125 octets qui sont une belle puissance trois).

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 10:54 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
Serait-ce le codage de la mort? (Qui est une composante du jeu de la vie)

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 11:29 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
En fait, même la méthode la plus rapide :

Code:
    LDU     #xxxx                       
    PULU    A,B,DP,X,Y,S
    LDU     #xxxx                       
    PSHU    A,B,DP,X,Y,S

qui t'obligerait à faire un programme pour générer le code, ne descend pas en dessous de la VBL :non:

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 13:14 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
la méthode LDU #XXX;PSHU prend 10 octets pour en copier 8, il faut donc réserver 10Ko pour copier une page vidéo de 8ko. Damned, c'est pas compact tout ca. Il y a intérêt à réserver la zone $0000->$3FFF rien que pour cette routine.

Et effectivement pour copier 8 octets il faut 28cycles donc 28ms pour l'écran "forme" au complet. Ca dépasse de peu, mais ca dépasse quand même. C'est à ce moment là qu'on envie l'instruction TFM du HITACHI 6309 (http://www.coco3.com/community/wp-conte ... n_Sets.pdf), copie de 8000octets en 6+3*8000= 24006.. ah ben zut c'est toujours plus long que les 20ms... mais au moins c'est compact (2 octets).

@Gilles, non pour le jeu de la vie l'optim est d'inverser l'algo. Au lieu de compter les cellules autour de celle courante (donc au moins 8 accès mémoire pour décider s'il y a un changement d'état), on peut utiliser un codage qui "contient" déjà une grosse partie du comptage et n'accéder à la mémoire qu'en cas de changement d'état.

Typiquement l'idée est d'encoder l'état d'une cellule sur 4 bits et de mettre l'état de deux cellules sur 1 seul octet comme suit: XYYYZUUU, X=1 si la cellule de gauche est vivante, et YYY=nombre de voisins vivants sur les 7 cellules adjacentes (l'état de la cellule de droite, la 8ème, est codée dans le Z)... Idem pour UUU qui compte les voisins vivants autour de la cellule de droite. Le calcul effectif du nombre de voisins vivants de la cellule de gauche d'un octet N=XYYYZUUU est : C = ((N & %01111000) + 8)>>4 (super rapide en ASM). En gros en ajoutant 8, on fait passer le Z sur les Y sans faire aucun décalage. Ensuite Si X=0, et C=3, alors X passe à 1 (soit N+=128) et il faut ajouter 1 à toutes les cellules voisines ce qui ne représente que 5 octets à mettre à jour. Si X=1, et C<2 ou C>3, alors X passe à 0 (soit N-=128) et il faut retirer 1 unit" aux 5 octets autour (car 1 octets = 2 cellules donc a pas 8 octets à mettre à jour). Sinon pour toutes les autres valeurs de X et C il n'y a rien de changé et on aura tout décidé en ne lisant qu'un seul octet. Évidemment les "Si" s'encodent dans une table précalculée indiquant pour chacun des 5 octets "autour" de l'octet courant l'incrément pour traiter simultanément la partie droite et la partie gauche, et c'est là que j'ai laissé tombé (momentanément?) ma réflexion car il y a plein de cas à précalculer. Il me faudrait écrire un générateur de code ASM pour être sur de ne pas oublier un cas, surtout dans les coins (car avec le "wrapping" sur le bord d'écran le calcul des offsets pour trouver l'octet à droite ou a gauche n'est pas de la tarte).

Alors personne n'a encore trouvé l'indice ? Je vais attendre un peu avant de poster la solution de ce que calcule le code de 125 octets... :voyons:

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Quizz: 5cube
MessagePosté: 19 Mai 2014, 16:33 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Un calcul de CRC ?

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 33 messages ]  Aller à la page 1, 2, 3  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 49 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com