Sega Master System en C
Ce matin j'ai pour le fun voulu installer un SDK pour programmer la master system en C ! L'installation se fait sans douleur ça c'est cool !
Lien du sdk
En gros on télécharge est installe le SDCC si ce n'est pas fait, on télécharge le SDK. on place des DLL dans le SDCC. (ou / et dans le dossier du projet car moi ça fonctionné comme ça). on créer un fichier cmd/bat.
1
2
3
4
5
6
7
8
9
| @echo off
sdcc -c -mz80 --peep-file peep-rules.txt main.c
sdcc -o main.ihx -mz80 --no-std-crt0 --data-loc 0xC000 crt0_sms.rel main.rel SMSlib.lib
ihx2sms main.ihx main.sms
echo End post-build
echo ========================================================
pause |
Et le tour est pratiquement joué. Dans le lien du SDK le mode d'emplois d'installation est fourni...
Ce matin j'ai donc regardé un peu comment afficher un tiles un sprite et les palettes de couleur car peux importe la machine , avec les commandes (pad) et ses trois trucs il y a souvent que ça vraiment à apprendre au début pour faire un jeu !
Le gros quadrillage c'est des tiles et le carré qui s'en détache c'est le sprite.
Source
Code source en C et le fichier smc pour lire le programme sur un émulateur master system. Le carré se déplace !
La gestion de la mémoire vidéo est un peu bisars. L'encodage linéraire du tiles se fait avec deux couleurs possible sinon c'est une gymnastique !
un tiles c'est 8 pixels sur 8.
Chaque ligne est encodé sur 4 octets. donc 32 octect par tiles/sprite
(La mémoire vidéo de la ms est de 16ko mais j'ai pas encore regardé / compris la map de la mémoire vidéo)
Une ligne est donc 4 octets. 1 octet c'est 8 bits donc pour chopper l'index de couleur du pixel !
Ligne 1:
Octet 1 : ABCDEFGH
Octet 2 : ABCDEFGH
Octet 3 : ABCDEFGH
Octet 4 : ABCDEFGH
Alors c'est une seul ligne de 8 pixel la.
L'index de couleur du 1er pixel : Ba c'est la recomposition de tous les bits A de chaque octet !
exemple :
0b 10000000
0b 10000000
0b 10000000
0b 10000000
Le pixel 1 c'est l'index 0x1111 soit l'index 15
Le pixel 2 c'est l'index 0x0000 soit l'index 0
Sur master system il a une palette de 64 couleurs, 4 niveaux de Rouge, 4 niveaux de Vert, 4 niveau de bleu. Et on peux créer deux palettes de couleurs. 16 couleurs pour les tiles, et 16 couleurs pour les sprites. Donc on range touis ça dans des index de 0 à 15 tous simplement.
Contrairement à la nes, la master ne semble pas avoir de contraire du nombre de couleur sur un sprite et un tiles. (A vérifier pour les sprites quand même mais je crois que non).
La nes à plein de contrainte d'affichage...
Au niveau d'affichage de sprite 8*8, la MS ne peut afficher que 8 sprites sur la même ligne, (soit 64px) mais il existe des astuces pour contourner le problème. (Les fameux clignotement de sprite de la nes aussi présent sur ms). Il faut alterner l'affichage des sprites à chaque boucle tout simplement.
Edit :
Mémoire vidéo Memory map :
$0 :Mémorisation du parterne des tiles soit 256 tiles (0 => 255)
$2000 : Mémorisation du parterne des sprites : 191 sprites (8*8) 256 => 447
$3800 : Affichage écran : 32*28 tiles(8*8px) soit 256*224px
$3F00 : Table des sprites avec position X,Y et index du tiles
$4000 : Fin
Note : Les tiles ne se pose pas au pixel près mais dans un quadrillage comme pratiquement toutes les consoles rétro.
|