MSX Village forum

La Place des Développeurs Slots / Pages / Mégarom : Comment ça marche ?

Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 17/01/2011 à 09h52

Reprise du message précédent

On peut choisir la page de démarrage d'une ROM, mais dans la sélection faite par le système au démarrage, il n'y a en fait que 2 possibilités : en page 1 ou en page 2. Mais une fois que le programme de la cartouche a pris la main, tout est possible ...

Tu peux utiliser les 64 Ko d'une cartouche, mais tu dois alors faire un choix :

1. Soit tu gardes le BIOS accessible (et donc forcément la RAM en page 3 pour les variables associées) et donc il ne te reste que les pages 1 et 2 pour visualiser les pages de ta cartouche (y compris tes 128Ko de RAM)

2. Soit tu travailles en dehors du BIOS (mais à tes risques et périls) et alors tu disposes des 4 pages entières.

Ceci dit, si tu a besoin de 192Ko de mémoire pour ta cartouche, la solution la plus simple est la structure MegaROM.
Il n'y a pas photo !


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10363

Le 17/01/2011 à 10h07
a l'init la megarom est reconnue par son en-tête 41 42 xx xx ( adresse de start ) définie au début
ensuite un simple ld a,n° de page , ld 7000h,a suffit a commuter la page


:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 17/01/2011 à 10h18
Pour rappel, la structure classique pour une MegaROM est la suivante :

page 0 : ROM contenant le BIOS afin d'accéder aux fonctions
page 1 : page libre pour accès aux pages de la MegaROM
page 2 : page libre pour accès aux pages de la MegaROM
page 3 : RAM (variables BIOS, hooks ...)

Cela donne un espace RAM libre sur la page 3 d'environ 12Ko, pour du stockage de données ou de variables, de la décompression ...

La contrainte est que l'on ne peut visualiser que 32Ko de la MegaROM à la fois, mais cette contrainte est atténuée par la souplesse de la sélection des pages dans cette structure, identique au Mémory Mapper. Et une MegaROM peut contenir jusqu'à 2048Ko ou même 4096Ko, suivant le mapper choisi (Konami ou ASCII).

Si vous avez besoin de plus de 64Ko d'espace, c'est de loin la meilleure solution :top


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 18/01/2011 à 09h05
GDX :
C'est plus compliqué que ça. Les banks 1 et 2 peuvent être divisées en 2 pour les mappage par page de 8Ko.

Ton exemple est pour un mappage sur 16Ko.


Ben ça je le sais bien, je te signale que c'est ce que j'expliquai dans le premier message de ce sujet :( :( :(



Mais pour expliquer la structure des MegaROM, il faut bien commencer par généraliser un peu pour rentrer ensuite dans le détail ...

Et à ce stade de l'explication, la nécessité de la sélection de la page 2 est superflue, ce n'est que du détail de mise en oeuvre.

Il vaut mieux poursuivre les explications et les éclaircissements plutôt que de noyer les intervenants sous un flots d'informations en vrac.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Franck Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 22h54

Messages: 3295

Le 18/01/2011 à 09h27
GDX, tu es le bienvenu dans notre village. Pourrais-tu stp te présenter dans la section idoine afin que l'on te connaisse un peu mieux, c'est plus sympa pour tout le monde :)
Merci d'avance.
   
RibbSayan Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 19/08/2010 à 22h47

Messages: 154

Le 19/01/2011 à 17h09
Voici une version corrigée d'un exemple de MegaROM de type Konami4, le code diffère très peu de celui que j'avais posté.

Il utilise les fonctions de asMsx pour les changement de sous-page.





; Entête

.bios ; de 0000h à 4000h : réservé au bios MSX

.megarom KONAMI ; Déclaration d'une megarom de type KONAMI4

.start MAIN_BEGIN ; Le code démarre sur l'étiquette MAIN_BEGIN

.db "MegaROM exemple",1Ah ; Information sur la ROM (1Ah doit surement finir la déclaration de l'entête)



MAIN_BEGIN:

.search ; Permet d'activer le slot secondaire sur la ROM voir doc asMSX (sinon, le slot secondaire c'est de la RAM)

call DISSCR ; Appel BIOS : Désactivation Ecran

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 ; Appel BIOS : Ecrire dans VDP

LOOP:

ld a,1 ; Mettre 1 dans a

SELECT a AT 6000h ; Slot Primaire entre 6000h et 7FFFh mettre la sous-page 1

SELECT a AT 8000h ; Slot Secondaire entre 8000h et 9FFFh mettre la sous-page 1

SELECT a AT 0A000h ; Slot Secondaire entre 0A000h et 0BFFFh mettre la sous-page 1

END:

halt ; V-Sync

jr END ; Aller à l'étiquette END



SUBPAGE 1 AT 6000h ; Définition de la sous-page 1 (AT 6000h permet de transformer les étiquettes en véritable adresse 16 bits)

SUB01: ; Ici l'étiquette SUB01 deviendra 6000h

db $01

SUBPAGE 2 at 8000h

SUB02: ; Ici l'étiquette SUB02 deviendra 8000h

db $02

SUBPAGE 3 at 0A000h

SUB03:

db $03

SUBPAGE 4 at 6000h

SUB04:

db $04

SUBPAGE 5 at 8000h

SUB05:

db $05

SUBPAGE 6 at 0A000h

SUB06:

db $06

SUBPAGE 7 at 06000h

SUB07:

db $07

SUBPAGE 8 at 08000h

SUB08:

db $08

SUBPAGE 9 at 0A000h

SUB09:

db $09

SUBPAGE 10 at 06000h

SUB10:

db $0A

SUBPAGE 11 at 08000h

SUB11:

db $0B

SUBPAGE 12 at 0A000h

SUB12:

db $0C

SUBPAGE 13 at 06000h

SUB13:

db $0D

SUBPAGE 14 at 08000h

SUB14:

db $0E

SUBPAGE 15 at 0A000h

SUB15:

db $0F



.page 3 ; Définition de la page 3 (de C000h à FFFFh) C'est la RAM et permet de créer des variables.

RAM:

ds 1





Une fois l'écran noir (ca fait que cela) allez le" debugger" de blueMsx, Mettre en pause l'émulation et dans la petite fenêtre Memory (en bas), tapez les adresses suivantes :

4000 => Sous-page 0 contenant le code.

6000, 8000 et A000 => Sous-page 1 (avec 1 dans le 1ère octet)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 20/01/2011 à 16h20
GDX :
Ce qui permis aux MSX de pouvoir gérer théoriquement jusqu'à 4096Ko par Slot. C'est à dire 64Mo !


Non, ton raisonnement n'est pas correct, ce n'est pas 64Mo.



Le Memory Mapper peut gérer jusqu'à un maximum 256 pages logiques pour chaque page physique (ce que tu appelles "bank"), ce qui fait un maximum de 256 x 16 Ko = 4096 Ko, donc 4Mo.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10363

Le 20/01/2011 à 16h58
4 slots primaires étendus donnent 16 slots secondaires

16 X 4Mo de ram = 64Mo je pense que GDX voulait parler de ça !

bien entendu avec un mapper de 4Mo a part faire un super ramdisk en Dos 2 je n'ai jamais eu d'autre utilité et vous ??



:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 21/01/2011 à 09h05
Jipe :
4 slots primaires étendus donnent 16 slots secondaires

16 X 4Mo de ram = 64Mo je pense que GDX voulait parler de ça !


J'avais bien compris, mais je ne suis pas d'accord avec vous ...

La norme n'a jamais prévu que le Memory Mapper puisse adresser plus de 4Mo !



A titre de référence, je vous invite à consulter le "MSX2 Technical Handbook", edité par ASCII pour décrire le standard MSX2.

Etant donné que le Memory Mapper était une option, il est seulement cité à deux endroits, mais les choses sont claires :



Code :
Figure 1.3  MSX2 block diagram

------------
| CPU Z80A |
------------
     |
     |    -----  -------------------------------
     +----|   |--| ROM 48K (MSX-BASIC ver 2.0) |
     |    |   |  -------------------------------
     |    | S |  ----------------
     |    |   |--| MAIN RAM 64K |
     |    | L |  ----------------
     |    |   |  :::::::::::::::::  :::::::::::::::::
     |    | O |::: MEMORY MAPPER :::: RAM 64K to 4M :
     |    |   |  :::::::::::::::::  :::::::::::::::::
     |    | T |  :::::::::::::
     |    |   |::: CARTRIDGE :  I/O Cartridge (Disk, RS-232C)
     |    |   |  :::::::::::::  RAM Cartridge
     |    -----              ROM Cartridge (Game, Application)
     |                  Slot Expansion Box, Etc.




Code :
APPENDIX 6 - I/O MAP
...
F8H to FBH    reserved
FCH to FFH    memory mapper




Etant donné qu'il n'y a que 4 ports, chacun contrôlant une des quatre pages physiques, et qu'il n'y a que 256 valeurs maximums par port, la limite du système est bien de 256 x 16Ko = 4096Ko.



Maintenant, on pourrait imaginer un système MSX avec plusieurs Memory Mapper (mais il faudrait trouver des ports libres pour les contrôler), ou alors un Memory Mapper plus complexe que l'on pourrait contrôler à travers les ports dédiés, par exemple en envoyant 2 valeurs consécutives pour adresser plus de pages logiques. Mais tout cela est en dehors de la définition de la norme MSX2 telle qu'elle était décrite en 1987 ...


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 21/01/2011 à 12h06
GDX :
Tu as lu mon explication ?


Faut pas t'énerver ... :p



Oui, j'ai lu ton explication ... Je veux bien te croire, mais explique moi alors comment tu sélectionnes la 257e page logique (ou la 258e, ou la 259e ...) sur un bank existant au travers des ports $FC à $FF ?



Pour moi, la limite logique est à 256 pages, que ce soit à travers un ou plusieurs Memory Mappers.

Ou alors, il faut sortir du standard défini, comme je l'explique dans mon message précédent.



C'est une discussion purement philosophique, mais elle est intéressante :lol


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10363

Le 21/01/2011 à 13h09
la selection du second mapper se fait par l'intermédiaire du port A8 pour selectionner le slot
j'ai fait des essais pour commuter sur un mapper externe 512k sur un MSX1 il y a quelques années en arriére
par contre pas essayé sur un slot étendu

en tout cas 2 mapper de 4mo dans un slot expander ça renvoi bien 8 Mo + la mémoire interne a l'init d'un 2+ ou Turbo-R


:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 21/01/2011 à 13h15
GDX :
Pourtant, j'ai (mal?) expliqué que les pages se sélectionnaient en même temps pour chacun des Memory Mapper et que si on sélectionnait la 9ème page d'un Mapper n'ayant que 8 pages, ben, c'est la page 0 qui serait sélectionnée. Puisque pour un Mapper de 8 page, seul les 3 premiers bits donneront la bonne valeur de la page sélectionnée (soit 256 divisé 8)


Non, tu avais bien expliqué ... :p



Mais ce que tu décris là explique ce qui se passe quand on a plusieurs Memory Mappers, chacun avec un nombre de pages inférieur à 256. Et ce que tu expliques créée un problème : si j'ai bien compris, lorsque tu sélectionnes une page sur un bank, tous les Memory Mappers changent de page en même temps. Mais alors quelle est la page visualisée par le Z80 ?



Concrètement, si tu envoies la valeur 8 sur le port $FE, quelle sera la page sélectionnée sur le bank 2 ?

La page n°8 du premier Memory Mapper, ou celle du second (ou du troisième ... ou du n-ième) ?

Il y a un conflit, non ?



:hum



EDIT : Je viens de voir la réponse de Jipe ... Je comprends mieux. Il faut donc sélectionner le slot avant de sélectionner la page. Et bien j'ai appris quelque chose, merci ! ... Reste à savoir si c'est possible avec les slots secondaires, ou si c'est uniquement possible à travers les slots primaires, auquel cas, la capacité maximum ne serait que de 16Mo.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie