Faire la musique c'est penible, faut pas que ca ralentisse , et que ca soit joli ...
Effectivement, je m'attends à de grosse suprise de ce coté là. Je vais me baser sur le PT3 player et AyFx player...
Mais bon, je ne suis pas musicien non plus... mais ca se sera aussi un autre problème !
Hello,
J'arrive bien à créer la rom de type Konami without scc avec asMSX (Ce que j'ai décrit plus haut) mais je n'arrive pas à inter-changer les "subpages". Du coup j'ai pleins de questions et je suis même prêt à changer de compilateur pour écrire du code plus "traditionnel" ressemblant à du vrai Z80 :
- Comment défini t'on une sous-page (avec asMsx, c'est bien le code .select mais en vrai, c'est quoi) ?
- Est-ce que les sous-pages de la rom peuvent être sélectionnées sur n'importe quel des 3 banks (6000h, 8000h et A000h) ?
- Une même sous-page peut elle être simultanément sur les 3 banks en même temps (même s'il y a peut d'intérêt) ?
- La bank fixe sur 4000h est elle considérée comme la sous-page 0 (à priori je crois que oui car la sous-page 1, 2 et 3 sont associées respectivement à 6000h, 8000h et A000h) ?
- Si quelqu'un a un exemple tout simple de code pour créer une megarom avec switch de subpage au dela de la 3eme subpage je suis vraiment preneur.
J'ai demandé un peu d'aider sur le MRC anglais mais bon les réponses ne sont pas vraiment satisfaisante (Surement que mes questions ne le sont pas non plus :-)
Enfin bref, je suis vraiment preneur de toute l'aide possible, je suis vraiment motivé à finir mon jeu et de le partager (code source et rom et tout l'expérience acquise)
en fait il faut regarder du coté électronique de la chose
la ROM est divisée en pages de 8 K que l'on peut déplacer dans la mémoire vue par le Z80
on ne voit que 4 pages a la fois 4000h 5FFFh , 6000h 7FFFh , 8000h 9FFFh , A000h BFFFh
une écriture de 6000h a 7FFFh commute la page X de 8K a l'adresse mémoire 6000h a7FFFh
donc pour changer de page un simple 3E XX 32 00 60 suffit
on peut avoir la même page de Roms dans 2 ou 3 banks de mémoire sans aucun probléme
dans les megarom konami la page 0 est fixe par soft mais électroniquement on peut la changer
si ça peut t'aider a mieux comprendre l'architecture car du coté asMSX il va falloir te débrouiller
Merci pour les infos, je comprends mieux la vision du 64Ko vu par le Z80.
Par contre, la rom, elle-même, est-ce juste des paquets de 8Ko dont le 1er comporte un entête avec des informations de démarrage ?
oui ce sont bien des paquets de 8K
le 1er en page fixe comprends les octets 41 42 xx xx ou xx xx correspond a l'adresse de start
il existe des mégaroms a bank de 16K dans les cartouches type ASCII et la il n'y a que 2 pages de 16k a commuter
le mieux étant de fouiller un peu dans les mégaroms avec un éditeur hexa et de chercher les 32 00 60 , 32 00 80 , 32 00 A0 pour se donner une idée de la chose ( valable uniquement sur une mégarom konami sans SCC bien sur )
Après quelques tests, j'ai enfin compris de quoi il en retourne dans asMsx (Même si quelques subtilités de déclaration me dépassent encore) Le but étant que je puisse accéder à toute la megarom.
J'ai déclaré une mégarom de type Konami 4 (sans scc) avec 16 sous-pages.
Pour commencer, la 1ère instruction à utiliser est ".search" qui impose au Z80 de voir la megarom entre l'adresse 8000h et BFFFh (sinon, c'est de la RAM)
La 1ère bank (4000h à 5FFFh) est initialisé automatiquement avec la sous-page 0 (qui n'a pas besoin d'être déclaré dans asMsx)
La 2ème bank (6000h à 7FFFFh) est initialisé automatiquement avec la sous-page 1 (qui a besoin d'être déclaré) Cette bank n'est capable que de voir que les sous-pages impaires... Fallait le savoir
.select 0 at $6000 -> on voit la sous-page 1, .select 1 at $6000 -> on voit la sous-page 3, .select 2 at $6000 -> on voit la sous-page 5,...
La 3ème bank et la 4ème bank peuvent eux heureusement voir toutes les sous-pages sans distinction.
Merci à la combinaison Editeur Hexa, AsMsx et BlueMsx Debuggeur pour m'avoir permis de décortiquer ce fonctionnement.
Merci aussi à Jipé.
Voici le code d'exemple que j'ai utilisé pour tester mes dires :
.bios .megarom Konami .start INIT db "MyMegarom2",1ah ; $8000 (0) INIT: .search ld a,0 select 15 at $A000 call INITIALISATION MAIN_LOOP: halt jr MAIN_LOOP .subpage 1 at $6000 ; $6000 (0) veut dire .select 0 at $6000 ; $8000 (1) ld a,1 .subpage 2 at $8000 ; $8000 (2) ld a,2 .subpage 3 at $A000 ; $6000 (1) ; $8000 (3) ld a,3 .subpage 4 at $6000 ld a,4 .subpage 5 at $6000 ; $6000 (2) INITIALISATION: ld a,5 call DISSCR ; Ecran désactivé ld hl,0f3e9h ; Color 15,0,0 ld [hl],15 inc hl ld [hl],0 inc hl ld [hl],0 call INIGRP ; Screen 2,2 ld bc,0e201h call WRTVDP ret .subpage 6 at $6000 ld a,6 .subpage 7 at $6000 ; $6000 (3) ld a,7 .subpage 8 at $6000 ld a,8 .subpage 9 at $6000 ; $6000 (4) ld a,9 .subpage 10 at $6000 ld a,10 .subpage 11 at $6000 ; $6000 (5) ld a,11 .subpage 12 at $6000 ld a,12 .subpage 13 at $6000 ; $6000 (6) ld a,13 .subpage 14 at $6000 ld a,14 .subpage 15 at $6000 ; $6000 (7) ld a,15
étrange le coup de sous-pages impaires , a vérifier dans une vraie mégarom
Je suis incapable de vérifier cela mais tout a fait capable de fournir le fichier qui va bien pour tester.
Je me reprends, je n'ai pas trouvé le problème de ma megarom de test mais après avoir repris une structure saine, on peut effectivement sélectionnée toutes les subpages sur toutes les banks ! C'est rassurant