Je me remets à la programmation sur CPC après 30 ans de break. J'ai commencé en 1986 et uniquement en Basic, et j'ai décidé de me relancer à la programmation en assembleur... Même pas peur, je suis rompu à l'assembleur x86, et le z80 n'est pas trop difficile. Bref, ce n'est pas le sujet
Ma question est simple: - Je suis en Mode 1 - Je n'ai pas changé les inks (donc par défaut ink 0=bleu, ink 1=jaune, ink 2=cyan, et ink 3=rouge) - Je tape : poke &c000, &x00110101
Puisque (en mode 1), les 4 pixels sont codés comme suit: couleur pixel0 = bits 7 et 3, soit %00 couleur pixel1 = bits 6 et 2, soit %01 couleur pixel2 = bits 5 et 1, soit %10 couleur pixel3 = bits 4 et 0, soit %11
je m'attends à voir les 4 pixels suivantes : bleu-jaune-cyan-rouge Et pourtant... non! Ca affiche bleu-cyan-jaune-rouge !
Ce qui me chicote, c'est ce qui est indiqué dans la page : "Encore une petite particularité: la valeur binaire de la couleur doit être "retournée" avant d'être placée dans l'octet."
Y'a que là que je trouve allusion à ce genre de manip. Et effectivement, si je fais le miroir binaire de chacune des couleurs, ça "marche"... sauf que je ne comprends pas pourquoi!
Un octet en mode 1 se décompose, en réalité, de la sorte : Bit 7 de l'octet : bit 0 (et non 1) de ink0 Bit 6 de l'octet : bit 0 (et non 1) de ink1 Bit 5 de l'octet : bit 0 (et non 1) de ink2 Bit 4 de l'octet : bit 0 (et non 1) de ink3 Bit 3 de l'octet : bit 1 (et non 0) de ink0 Bit 2 de l'octet : bit 1 (et non 0) de ink1 Bit 1 de l'octet : bit 1 (et non 0) de ink2 Bit 0 de l'octet : bit 1 (et non 0) de ink3
Donc, si on veut les 4 pixels : ink0+ink1+ink2+ink3 dans un octet, en mode 1, dans l'ordre, ça nous donne :
bit7 de l'octet =bit0 de ink0 (00), soit 0 (bon dans votre essai) bit6 de l'octet =bit0 de ink1 (01), soit 1 (pas bon dans votre essai) bit5 de l'octet =bit0 de ink2 (10), soit 0 (pas bon non plus) bit4 de l'octet =bit0 de ink3 (11), soit 1 (bon dans votre essai) bit3 de l'octet =bit1 de ink0 (00), soit 0 (bon encore) bit2 de l'octet =bit1 de ink1 (01), soit 0 (pas bon) bit1 de l'octet =bit1 de ink2 (10), soit 1 (pas bon) bit0 de l'octet =bit1 de ink3 (11), soit 1 (bon)
Et donc : 01010011 = poke &c000,&x01010011 = le quarté gagnant, dans l'ordre
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 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