CPC Rulez
https://cpcrulez.fr/forum/

Encodage des couleurs pixels, je suis confus
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=5896
Page 1 sur 1

Auteur :  avtcoco [ 01 Mars 2017, 14:50 ]
Sujet du message :  Encodage des couleurs pixels, je suis confus

Salut à tous,

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 :)

J'ai lu et relu les pages suivantes pour bien comprendre comment la mémoire écran est faite:
http://cpcrulez.fr/coding_ANTIBUG-01-struct_memoire_ecran.htm
et
http://cpcrulez.fr/coding_ecran_du_cpc1.htm

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!

Qu'est-ce que j'ai raté, ou mal compris?

Merci pour vos éclaircissements :)
avtcoco

Auteur :  Tronic [ 01 Mars 2017, 23:59 ]
Sujet du message :  Re: Encodage des couleurs pixels, je suis confus

Bonsoir,

Les "valeurs des encres" exprimées en bits doivent-être tout simplement "inversées" lorsque placées dans l'octet.

Mode 1 = 4 inks :
"valeur" 2 bits ink 0 = 00
"valeur" 2 bits ink 1 = 01
"valeur" 2 bits ink 2 = 10
"valeur" 2 bits ink 3 = 11

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 ;)

A+
Tronic/GPA

Auteur :  avtcoco [ 02 Mars 2017, 09:20 ]
Sujet du message :  Re: Encodage des couleurs pixels, je suis confus

Merci pour votre réponse, ça confirme bien mes investigations. Maintenant je sais à quoi m'en tenir :)

J'en profite pour remercier les administrateurs de cpcrulez.fr, votre site est une mine d'or!

avtcoco

Auteur :  hERMOL [ 02 Mars 2017, 11:37 ]
Sujet du message :  Re: Encodage des couleurs pixels, je suis confus

avtcoco a écrit :
J'en profite pour remercier les administrateurs de cpcrulez.fr, votre site est une mine d'or!
et les utilisateurs du site des pépites :)

Page 1 sur 1 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/