MSX Village forum

La Place des Développeurs Do The Same - MSX

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2657

Le 01/07/2021 à 22h56

Reprise du message précédent

Pour la palette, chaque puce graphique (VDP) a ses propres réglages de couleur.

La plupart des ordinateurs MSX1 sont équipés de la puce Texas Instruments TMS9918, mais certains utilisent des clones avec des réglages de couleurs légèrement différents (comme le Toshiba T6950 ou le Yamaha YM2220). Sur MSX1 on ne peut rien y faire.

Les MSX2 sont eux généralement équipés d'un Yamaha V9938 qui a effectivement des réglages de bases assez différent du TMS9918. Mais là, on y peut quelque chose puisqu'à partir du MSX2, la palette de 16 couleurs peut être redéfinie. Il est donc tout à fait possible pour un programme de détecter au démarrage si l'ordinateur est équipé d'un VDP MSX2 (ou plus) et si c'est le cas, de redéfinir les 16 couleurs pour les faire correspondre à des réglages proches de ceux des MSX1. Ce n'est pas trivial à faire, mais si ça t'intéresse, j'ai tout le code qu'il faut pour faire ça dans ma lib.

Les couleurs de la palette du MSX2 sont définies sur 9-bits (3-bits par canal rouge-vert-bleu) et stocker sur 16-bits dans le VDP.
On doit pouvoir trouver les valeurs à mettre pour s'approcher au plus près des couleurs du MSX1.

EDIT: Pour visualiser la différence...
TMS9918 V9938


EDIT2: Voici les valeurs de la palette MSX2 d'origine et les valeurs pour s'approcher des couleurs du MSX1

Palette MSX2 d'origine Palette MSX2 style MSX1
Code TEXT :
 
   + R + G + B
0  | 0 | 0 | 0
1  | 0 | 0 | 0
2  | 1 | 6 | 1
3  | 3 | 7 | 3
4  | 1 | 1 | 7
5  | 2 | 3 | 7
6  | 5 | 1 | 1
7  | 2 | 6 | 7
8  | 7 | 1 | 1
9  | 7 | 3 | 3
10 | 6 | 6 | 1
11 | 6 | 6 | 4
12 | 1 | 4 | 1
13 | 6 | 2 | 5
14 | 5 | 5 | 5
15 | 7 | 7 | 7
 
Code TEXT :
 
   + R + G + B
0  | 0 | 0 | 0
1  | 0 | 0 | 0
2  | 1 | 5 | 1
3  | 3 | 6 | 3
4  | 2 | 2 | 6
5  | 3 | 3 | 7
6  | 5 | 2 | 2
7  | 2 | 6 | 7
8  | 6 | 2 | 2
9  | 6 | 3 | 3
10 | 5 | 5 | 2
11 | 6 | 6 | 3
12 | 1 | 4 | 1
13 | 5 | 2 | 5
14 | 5 | 5 | 5
15 | 7 | 7 | 7
 



On est toujours ignorant avant de savoir.
Github    
Ferrerico Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 02/01/2010 à 22h24

Messages: 83

Le 02/07/2021 à 15h02
magnifique


Ferrerico :lol
Visiteurs

Vagabond

Rang

Avatar

Message : 0

Le 02/07/2021 à 16h31
Le jeux a l'air très sympa, c'est vraiment intéressant de suivre le topic pour voir le processus.
Je vois que vous êtes nombreux à programmer et utiliser vos machines à fond.
   
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 02/07/2021 à 18h17
Merci les zamis

Dans le village, il y a plein de 'pointures' qui sont en plus pédagogues ;) Ca aide. Merci à eux

Pour mon probleme de synchro, j'avais laissé dans la boucle du jeu un afficheur qui n'avait plus lieu d'etre là (pour des tests). J'ai enlevé la routine et c'est good à nouveau ;)

Concernant les couleurs, même en screen2, je peux changer la palette ?
Je suis en train de tester le type de machine 0x002d et je me renseigne sur la palette :)
A+ pour un autre épisode

Suisse 0 - Espagne 1


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2657

Le 02/07/2021 à 19h00
Sur MSX2, les modes écran (y compris ceux hérités du MSX1) utilisent la même palette de 16 couleurs redéfinissables.
Les modes 4-bits par couleur utilisent toutes les 16 entrées (0-15), le mode 2-bits par couleur, uniquement les 4 premières entrées (0-3), et le mode 1-bit (monochrome) utilise 2 couleurs dont l'index est définie dans des registres du VDP.
La seule exception c'est le mode écran 8, qui n'utilise pas la palette (chaque pixel est représenté par 1 octet qui stock les valeurs rouge-vert-bleu).
Donc si tu redéfinies la palette MSX2 pour la faire ressembler à celle du MSX1, ton jeu aura à peu près les mêmes couleurs sur tous les MSX.

Sur MRC, j'ai trouvé une routine assembleur pour initialiser la palette MSX2 avec des couleurs proches du MSX1.
A mon avis, tu pourrais la mettre tel quelle au début de ton programme et tu n'as peut-être même pas besoin de détecter le MSX2 car sur MSX1, le code ne va probablement juste rien faire.

Code ASM :
 
; Routine to set colors palette MSX1 like
 
VDP_DW    equ    00007h
RG16SAV    equ    0FFEFh
 
MSX1palette:
    ld    a,(VDP_DW)
    ld    c,a        ; C= CPU port connected to the VDP writing port #1
 
    xor    a        ; Set color 0 ...
    di
    out    (c),a
    ld    (RG16SAV),a
    ld    a,80h+16    ; ...into register 16 (+80h)
    out    (c),a
    ei
 
    inc    c        ; C= CPU port connected to the VDP writing port #2
    ld    b,31
    ld    hl,MSX1paletteData
    otir
    ret
 
MSX1paletteData:
    db    00h,0    ; Color 0
    db    00h,0    ; Color 1
    db    11h,5    ; Color 2
    db    33h,6    ; Color 3
    db    26h,2    ; Color 4
    db    37h,3    ; Color 5
    db    52h,2    ; Color 6
    db    27h,6    ; Color 7
    db    62h,2    ; Color 8
    db    63h,3    ; Color 9
    db    52h,5    ; Color A
    db    63h,6    ; Color B
    db    11h,4    ; Color C
    db    55h,2    ; Color D
    db    55h,5    ; Color E
    db    77h,7    ; Color F
 


Si tu as besoin d'un coup de main pour la convertir en assembleur en ligne pour SDCC, dis-moi.
Bon match ;)


On est toujours ignorant avant de savoir.
Github    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 02/07/2021 à 21h49
Ah la Suisse, j'y croyais...

Pour la routine, c'est justement sur celle-ci que je me suis attardé ;)

Ma conversion ASM pour SDCC

#define VDP_DW 0x0007
#define RG16SAV 0xFFEF

const unsigned char MSX1paletteData[] = {
0x00,0, // Color 0
0x00,0, // Color 1
0x11,5, // Color 2
0x33,6, // Color 3
0x26,2, // Color 4
0x37,3, // Color 5
0x52,2, // Color 6
0x27,6, // Color 7
0x62,2, // Color 8
0x63,3, // Color 9
0x52,5, // Color A
0x63,6, // Color B
0x11,4, // Color C
0x55,2, // Color D
0x55,5, // Color E
0x77,7 // Color F
};

void MSX1palette(void) __naked
{
__asm
ld a,(VDP_DW)
ld c,a // C= CPU port connected to the VDP writing port #1

xor a // Set color 0 ...
di
out (c),a
ld (RG16SAV),a
ld a,#0x80+16 // ...into register 16 (+80h)
out (c),a
ei

inc c // C= CPU port connected to the VDP writing port #2
ld b,#31
ld hl,#_MSX1paletteData
otir
ret
__endasm;
}


Je n'ai pas vu de changement !
J'ai essayé meisei (msx1) - catapult (8245, msx2) - bluemsx (msx2+)...
J'y retourne


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2657

Le 02/07/2021 à 23h25
Le mieux est de tester avec OpenMSX avec les profils de vrais modèles de MSX (perso, j'utilise le Canon V20 comme réf de MSX1 PAL et le Philipps VG-8235 comme réf de MSX2 PAL).
C'est le seul émulateur ou je suis sûr qu'il gère correctement la palette de chaque puce graphique des MSX (même les clones de TMS9918/V9938).


On est toujours ignorant avant de savoir.
Github    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 03/07/2021 à 09h31
Voici une capture écran faite avec à gauche un msx1 (canon v20) et à droite msx2 (8245)
on voit la différence avec le bleu et le rouge des carottes par exemple.



le passage en screen5 serait-il le bienvenu ?

A+ et bon weekend :)



Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10258

Le 03/07/2021 à 10h41
Salut Ricco

si tu passe en screen5 il y aura plusieurs inconvénients

- ce ne sont plus des tiles 8x8 a gérer mais du bitmap, il faut donc se créer le tiles dans une page et faire des COPY d'une page vers l'autre

- tu ne seras plus "compatible" avec les règles 2021 du MSXdev il faudra attendre le version 2022 qui est plus libre :)

si tu redéfinit la palette au tout début de ton programme ça doit fonctionner

je l'ai dèja fait en basic avec des jeux MSX1 ayant un loader basic et des .bin

en utilisant des COLOR=(N°de palette,rouge,vert,bleu)


:noel
Site web    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 03/07/2021 à 12h19
Effectivement,

Mes doigts sont allés plus vite que mon cerveau : j'etais resté sur SCREEN8 et 256Couleurs. Pour moi SCREEN5 etait aussi en tiles... stoupid idiot comme dirait Benny Hill LOL

Je vais y jeter un oeil dans la soirée :)


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10258

Le 03/07/2021 à 12h23
après tu peux aussi faire 2 modes pour les MSX2 et plus

palette normale et palette msx1

juste une touche a appuyer pour choisir ;)


:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10258

Le 03/07/2021 à 13h03
si je me rappelle une commande screen2 efface les palettes

il faut donc passer en screen2 puis changer la palette


:noel
Site web    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 03/07/2021 à 13h12
Il me reste un peu moins de 2ko hihihi

Non, je v m'attacher à ce pb de couleurs en modifiant la palette de 16 couleurs msx2 pour rendre la palette 'identique' à celle du msx1


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2657

Le 03/07/2021 à 14h44
Comme dis Jipe, si tu utilises les fonctions du Bios pour passer en Screen 2, il n'est pas impossible que le Bios réécrase la palette à ce moment-là pour mettre la palette MSX2 par défaut.
Test de mettre ta fonction MSX1palette() après le passage en Screen 2.


On est toujours ignorant avant de savoir.
Github    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 03/07/2021 à 22h31
Il y a qd meme un truc que je ne m'explique pas :
La color table est en 0x2000.
Sur OpenMSX debugger (VDP registers view V9938) c'est pareil.
Mais sur https://www.msx.org/wiki/VDP_Color_Palette_Registers, dans la partie Storage of palette in VRAM, la palette est stockée en 0x1B80 pour un screen2
Je n'ai pas du comprendre la subtilité

concernant mon passage en mode screen2, j'utilise
call INIGRP (0x0072) et ensuite

MSX1palette()

Je decouvre, je perds mes cheveux mais c'est l'éclate totale HIHIHIHI


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2657

Le 03/07/2021 à 22h48
La palette n'est pas stocké en VRAM, mais dans une mémoire spéciale de 32 octets dans le VDP et uniquement accessible via un registre dédié.
Elle représente les valeurs rouge-vert-bleu de chaque index (numéro de couleur).

A priori, le BASIC stock effectivement ces valeurs en VRAM, mais c'est spécifique au BASIC et ça n'a aucun intérêt dans ton cas.
Seul les valeurs enregistrées dans le VDP vont influencer l'affichage.

En VRAM, par contre, tu as la Pattern Colors Table, utilisé par les modes écrans 1 à 4, qui représente les index de couleurs utilisées par les tiles.
On y trouve aussi les informations d'index de couleurs des sprites.


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie