Colecovision et Megacart
3 participants
Page 1 sur 1
Colecovision et Megacart
A la demande de Mister bfg Michel Louvet, voici donc un tuto de mon premier essai de génération d'une Megacart pour Colecovision.
Programmation de la MegaCart pour faire du bank Switching
Le bank switching d’une MegaCart consiste juste à lire une adresse spécifique de la mémoire pour changer d ebank.
Sdcc permet de faire du bank switching dans sa dernière version mais j’ai pas trouvé cela simple.
Le plus simple est de réaliser cela par une lecture de ce type :
char dummyx = *((volatile char*)0xFFFF); // switch to bank 0
Les 64 octets du haut de la mémoire de la Coleco ( FFC0h-FFFFh) sont réservés pour le switch de banks. Bien entendu, ne pas mettre de données à cet endroit.
La bank choisie est de 16K et se trouve dans la plage d’adresses C000h-FFFFh.
Donc, l’EPROM doit être réalisée de la sorte :
bank0 = EPROM 0000h-3FFFh
bank1 = EPROM 4000h-7FFFh
bank2 = EPROM 8000h-BFFFh
etc …
Les premiers 16K de la cartouche (8000h-BFFFh) sont fixes et doivent toujours contenir le contenu de la bank de 16K la plus élevée de la cartouche. Aussi, ces données vont donc apparaitre 2 fois si la dernière bank est choisie lors du bank switching (8000h-BFFFh et C000h-FFFFh).
Pour utiliser ce mode, j’utilise donc :
Sdcc dans sa version 3.3.0, pas de modification particulière de crt0, cela fonctionne sans (testé sur Hard avec un AtariMax).
Mon outil de lecture des fichiers ihx cvmkcart.exe pour réorganiser les différentes bank dans la rom finale. Les fichiers ihx sont générés par le linker et ne ne sont que des fichiers de données binaires de la future rom.
Exemple avec 2 images sur cette video youtube :
Chaque image est dans une banque différente , mais pour rappel, le switch se fait dans la mémoire c000h et donc, on doit déclarer les données dans cette banque.
On switch de bank comme indiqué dans le fichier banksw.c de l'exemple :
unsigned char dummy;
#define SWITCH_IN_BANK0 { dummy=(*(volatile unsigned char*)0xFFFC); } // b0 with 64k
#define SWITCH_IN_BANK1 { dummy=(*(volatile unsigned char*)0xFFFD); } // b1 with 64k
Pour faire le siwthc dans le code :
SWITCH_IN_BANK0;
Ensuite, cela se fait à la compilation en utilisant l’ordre --constseg ou encore codeseg si on a aussi du code dans la bank voulue.
image1.rel: image1.c
$(CC) $(CFLAGS) -c -mz80 --vc --no-std-crt0 --constseg bank1 image1.c
image2.rel: image2.c
$(CC) $(CFLAGS) -c -mz80 --vc --no-std-crt0 --constseg bank2 image2.c
Ensuite, lors de la phase de link, on déclare les différentes banks que l’on a utilisé via cette option :
LDFLAGS += -mz80 --no-std-crt0 -Wl-b_bank1=0xc000 -Wl-b_bank2=0xc000 --code-loc 0x8048 --data-loc 0x7000
Ici, bank1 et bank2 sont declarées via l’option –Wl-b_, le reste est standard pour la compilation.
Enfin, on utilise plus l’outil par défaut de création de la rom mais mon outil, en spécifiant le nombre de banks, le nom du fichier ihx et le nom de la rom finale.
Dans notre exemple : cvmkcart -icrtcv.ihx -b2 $(TARGET).rom
L’exemple fourni fait le switch entre les 2 banks de départ pour mettre soit la première, soit la seconde image dans la bank c000h.
Ne pas oublier d’ouvrir la rom avec l’option megacart dans BlueMsx sinon, ça fonctionera pas
En lien, le fichier exe de création ainsi que l’exemple.
http://www.portabledev.com/media/coleco/banksw/cvmkcart.exe
http://www.portabledev.com/media/coleco/banksw/banksw.zip
Programmation de la MegaCart pour faire du bank Switching
Le bank switching d’une MegaCart consiste juste à lire une adresse spécifique de la mémoire pour changer d ebank.
Sdcc permet de faire du bank switching dans sa dernière version mais j’ai pas trouvé cela simple.
Le plus simple est de réaliser cela par une lecture de ce type :
char dummyx = *((volatile char*)0xFFFF); // switch to bank 0
Les 64 octets du haut de la mémoire de la Coleco ( FFC0h-FFFFh) sont réservés pour le switch de banks. Bien entendu, ne pas mettre de données à cet endroit.
La bank choisie est de 16K et se trouve dans la plage d’adresses C000h-FFFFh.
Donc, l’EPROM doit être réalisée de la sorte :
bank0 = EPROM 0000h-3FFFh
bank1 = EPROM 4000h-7FFFh
bank2 = EPROM 8000h-BFFFh
etc …
Les premiers 16K de la cartouche (8000h-BFFFh) sont fixes et doivent toujours contenir le contenu de la bank de 16K la plus élevée de la cartouche. Aussi, ces données vont donc apparaitre 2 fois si la dernière bank est choisie lors du bank switching (8000h-BFFFh et C000h-FFFFh).
Pour utiliser ce mode, j’utilise donc :
Sdcc dans sa version 3.3.0, pas de modification particulière de crt0, cela fonctionne sans (testé sur Hard avec un AtariMax).
Mon outil de lecture des fichiers ihx cvmkcart.exe pour réorganiser les différentes bank dans la rom finale. Les fichiers ihx sont générés par le linker et ne ne sont que des fichiers de données binaires de la future rom.
Exemple avec 2 images sur cette video youtube :
Chaque image est dans une banque différente , mais pour rappel, le switch se fait dans la mémoire c000h et donc, on doit déclarer les données dans cette banque.
On switch de bank comme indiqué dans le fichier banksw.c de l'exemple :
unsigned char dummy;
#define SWITCH_IN_BANK0 { dummy=(*(volatile unsigned char*)0xFFFC); } // b0 with 64k
#define SWITCH_IN_BANK1 { dummy=(*(volatile unsigned char*)0xFFFD); } // b1 with 64k
Pour faire le siwthc dans le code :
SWITCH_IN_BANK0;
Ensuite, cela se fait à la compilation en utilisant l’ordre --constseg
image1.rel: image1.c
$(CC) $(CFLAGS) -c -mz80 --vc --no-std-crt0 --constseg bank1 image1.c
image2.rel: image2.c
$(CC) $(CFLAGS) -c -mz80 --vc --no-std-crt0 --constseg bank2 image2.c
Ensuite, lors de la phase de link, on déclare les différentes banks que l’on a utilisé via cette option :
LDFLAGS += -mz80 --no-std-crt0 -Wl-b_bank1=0xc000 -Wl-b_bank2=0xc000 --code-loc 0x8048 --data-loc 0x7000
Ici, bank1 et bank2 sont declarées via l’option –Wl-b_, le reste est standard pour la compilation.
Enfin, on utilise plus l’outil par défaut de création de la rom mais mon outil, en spécifiant le nombre de banks, le nom du fichier ihx et le nom de la rom finale.
Dans notre exemple : cvmkcart -icrtcv.ihx -b2 $(TARGET).rom
L’exemple fourni fait le switch entre les 2 banks de départ pour mettre soit la première, soit la seconde image dans la bank c000h.
Ne pas oublier d’ouvrir la rom avec l’option megacart dans BlueMsx sinon, ça fonctionera pas
En lien, le fichier exe de création ainsi que l’exemple.
http://www.portabledev.com/media/coleco/banksw/cvmkcart.exe
http://www.portabledev.com/media/coleco/banksw/banksw.zip
Invité- Invité
Re: Colecovision et Megacart
Bon, ben je peux déjà annoncer que BombJack utilisera une mégacart :) :) !! Ça marche !
bfg- Patient contaminé
- Nombre de messages : 806
Localisation : DMC
Date d'inscription : 11/09/2005
Re: Colecovision et Megacart
tant mieux , faut toujours que je réponde à ton mail ou tu as trouvé tout seul les réponses ?
En fait, j'ai aussi répondu à ton mail ^^
En fait, j'ai aussi répondu à ton mail ^^
Invité- Invité
Re: Colecovision et Megacart
Ben disons que j'ai réussit à faire fonctionner le bignou, mais que je ne percutais pas vraiment comment ça marchait. J'ai réussit à le déduire, et ton mail à conforté ma propre explication
bfg- Patient contaminé
- Nombre de messages : 806
Localisation : DMC
Date d'inscription : 11/09/2005
Re: Colecovision et Megacart
pour un novice ...
possibilité d’intégrer un jeu en 2x32k ou 4x 16k ? sur une cartouche ?
elle fonctionnera sans SGM ? supergame module ?
si oui mais c'est énorme
a moins que ce soit ceci ?
http://www.colecovision.dk/sem.htm
possibilité d’intégrer un jeu en 2x32k ou 4x 16k ? sur une cartouche ?
elle fonctionnera sans SGM ? supergame module ?
si oui mais c'est énorme
a moins que ce soit ceci ?
http://www.colecovision.dk/sem.htm
MegaCart 2 is the new
ColecoVision Super Game Cartridge = SGC
"Every new future OpCode Game will be stored in this Cartridge"
"Save your game data on it without the use of batteries."
The MegaCart 2 is a production name for the new MegaCart, and the official name is Super Game Cartridge.
The Super Game Cartridge is a kind of media cartridge, a PCB that fits inside a regular Coleco cartridge casing, allowing games to be larger than 32K.
ColecoVision Super Game Cartridge = SGC
"Every new future OpCode Game will be stored in this Cartridge"
"Save your game data on it without the use of batteries."
The MegaCart 2 is a production name for the new MegaCart, and the official name is Super Game Cartridge.
The Super Game Cartridge is a kind of media cartridge, a PCB that fits inside a regular Coleco cartridge casing, allowing games to be larger than 32K.
Up to 32 KB of Save RAM. to save any game data, like high score, save points, etc.
And 128 KB of MegaRAM. Allows even more advanced games, like MSX MegaROM games.
It is to find in the cartridge, not the Super Game Module.
And 128 KB of MegaRAM. Allows even more advanced games, like MSX MegaROM games.
It is to find in the cartridge, not the Super Game Module.
terrible
Re: Colecovision et Megacart
Oui, c'est exactement cela.erikrom2 a écrit:pour un novice ...
possibilité d’intégrer un jeu en 2x32k ou 4x 16k ? sur une cartouche ?
elle fonctionnera sans SGM ? supergame module ?
si oui mais c'est énorme
Pas de SGM, une cartouche toute simple, avec la ROM en plus et effectivement, la possibilité d'avoir de la mémoire réinscriptible pour la sauvegarde des scores (comme dans un certain Bagman ).
Invité- Invité
Re: Colecovision et Megacart
La sauvegarde des scores, un truc qui manquait vraiment à la Coleco à l'époque. Je notais mes scores sur un papier et faisait un top 10 avec un crayon de bois et une gomme !
_______________________________________________________
Sujets similaires
» [VDS] Vic 20 MEGACART
» [MEGA CD] Pro CDX ou MegaCart ?
» [estim] jeu Colecovision SUBROC + câble vidéo console COLECOVISION
» colecovision
» [VDS] ou [ECH] de la COLECOVISION
» [MEGA CD] Pro CDX ou MegaCart ?
» [estim] jeu Colecovision SUBROC + câble vidéo console COLECOVISION
» colecovision
» [VDS] ou [ECH] de la COLECOVISION
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum