Offgame | Le Comptoir du Clickeur | Retro Making | Site photo | ||
Accueil | Chronologie | Qui-suis-je | Archives | ABC | Le Basic | Kit Dev Homebrew | Palette |Collection | ||
Programmation de la mégadrive
Voici une petite page sur mes recherches dans la programmation de la mégadrive.
SDK/Logiciel :
BasiEgaXorz, Programmation en langage Basic.Second Basic , un autre ide en langage Basic. SGDK, programmation en langage C.Tuto pour l'installation du SGDK Caractéristique Nom official : Sega Megadrive (1 et 2) /Sega Genesis (1 et 2) Microprocesseur :Motorola 68000 (8Mhz) et Zilog Z80A (4 Mhz) Mémoire Ram :64Ko Mémoire Vidéo :64Ko Mémoire Sonore : 8 Ko Graphismes : -4 Palettes de 16 couleurs qui sont programmables. -Nuancier de 512 teintes. (8 niveaux de rouge, 8 niveaux de vert, 8 niveaux de bleu) -320x224px (40x28 tiles) et 256*224px (32*28 tiles) en NTSC (60 hz) -320*240px (40x30 tiles) et 256*240 px(32*30 tiles) en PAL (50 hz) -Sprite machine (80) / Plan Windows / Plan A / Plan B Sonore : -PSG Ti 76489 Chip -FM Chip Yamaha YM 2612 (6 canaux stéréo) Encodage des couleurs
Poids d'un tiles de 8*8
Espace pris d'un tiles de 8*8 : 32 octets(soit 128 octets pour un tiles de 16*16) Explication Un tiles c'est 8 points de largeur et 8 points de hauteur. La mémorisarion d'un tiles se fait avec 8 valeurs hexadécimal répété 8 fois. Un octet c'est une valeur entre 0 et 255 soit deux valeurs haxadécimale. (8 bits) Ce qui fait donc par ligne 8/2 = 4 octets par ligne répété sur 8 lignes soit 32 octets par tiles. Un tiles "Standard" de 16px est égale à 4 tiles. Soit 128 octets de mémoire. Exmple d'un carré
const u32 tile[8]=
{ 0x11111111, 0x10000001, 0x10000001, 0x10000001, 0x10000001, 0x10000001, 0x10000001, 0x11111111 }; Affichage d'un tile avec le SGDK
// Placer les chevrons avant et aprés genesis.h.
#include genesis.h // Permet d'initier le nombre de Tiles dans la mémoire en define. #define NUM_TILES_TILESET 4 // Permet de définire l'adresse d'un morceau de Tiles. // Un tile est égale à 8*8px, il faut donc 4 tiles pour faire un tiles "normalisé" de 16px. #define VRAM_POS_TILE_A TILE_USERINDEX + 0 #define VRAM_POS_TILE_B TILE_USERINDEX + 1 #define VRAM_POS_TILE_C TILE_USERINDEX + 2 #define VRAM_POS_TILE_D TILE_USERINDEX + 3 // Mise en mémoire "Rom" des tiles dans un tableau. // Chaque Tile possède 8 lignes, chaque valeur est un point placé sur l'écran et qui corespond à l'index d'une palette. const u32 exemple_tile[NUM_TILES_TILESET*8] = { // TILE A 0x11111111,0x13333333,0x13333333,0x13333333,0x13333333,0x13333333,0x13333333,0x13333333, // TILE B 0x11111111,0x33333331,0x33333331,0x33333331,0x33333331,0x33333331,0x33333331,0x33333331, // TILE C 0x13333333,0x13333333,0x13333333,0x13333333,0x13333333,0x13333333,0x13333333,0x11111111, // TILE D 0x33333331,0x33333331,0x33333331,0x33333331,0x33333331,0x33333331,0x33333331,0x11111111 }; // Mise en mémoire "Rom" dans un tableau, une palette de couleur const u16 exemple_palette[16] = { 0x0000,0x06CE,0x0291,0x0412,0x0214,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 }; int main() { // En charge en mémoire vidéo la palette du tableau background_palette de la "rom" en PAL0. VDP_setPalette(PAL0, exemple_palette); // En charge en mémoire vidéo, les tiles du tableau "exemple_tile". VDP_loadTileData(exemple_tile, TILE_USERINDEX, NUM_TILES_TILESET, 0); // En affichage sur le Plan_A les 4 tiles de 8px pour reformer un tile de 16px. // Les coordonnée X et Y sont en Cellule et non en pixel, Attention à ça. VDP_setTileMapXY( PLAN_A, VRAM_POS_TILE_A , 0,0); VDP_setTileMapXY( PLAN_A, VRAM_POS_TILE_B , 1,0); VDP_setTileMapXY( PLAN_A, VRAM_POS_TILE_C , 0,1); VDP_setTileMapXY( PLAN_A, VRAM_POS_TILE_D , 1,1); // Une boucle pour le fun ! while(1) { VDP_waitVSync(); } } |
||
Site réalisé par Jean Monos. |