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: 1503

Le 14/01/2011 à 09h59
granced :
aoineko :
Je m'y perd un peu au niveau des histoires de slots et de pages.
Pas mieux. Et c'est pas faute de lire et relire les bouquins :'(








Je propose de scinder le sujet pour ne pas polluer celui d'origine ...



EDIT : Voilà c'est fait, on peut désormais traiter ce sujet en profondeur.




Il faut distinguer la gestion des slots qui est réalisée par le MSX et la gestion des slots qui est réalisée par les MegaROMs.







Celle réalisée par le MSX est un peu complexe, mais est bien expliquée dans le livre "Pratique du MSX2" ...



Elle est réalisée par le MSX dans le sens ou ce sont des routines BIOS utilisant les ports du Z80 qui sélectionnent les pages.



Cependant, elle ne nous est pas très utile dans le cadre du développement d'un jeu, car elle est un peu contraignante (en dehors du Memory Mapper, effectivement une option sur MSX2) et limite les pages réellement adressables par les pages physiques.



Généralement on utilise plutôt la structure d'une ROM ou d'une MegaROM.







Celle réalisée par les MegaROMs est très simple et est en fait quasi identique au Memory Mapper.



Là, c'est la MegaROM qui travaille à travers sa propre électronique embarquée.



Concrètement, l'écriture du numéro de la page que l'on veut sélectionner dans l'espace mémoire de la page physique provoque la sélection de la page.



Par exemple, si on écrit la valeur 4 n'importe où dans l'espace $4000-$7FFF, on va sélectionner la page 4 pour cette page physique là.



Très simple et très efficace. C'est l'électronique de la cartouche qui travaille ...







En réalité, c'est un peu plus complexe que ça, mais aussi plus flexible, car la structure classique des MegaROM Konami (les plus fréquemment utilisées) fonctionne par page de 8K, soit une demi page. On peut donc sélectionner un total de 16 pages logiques (parmi 256) sur les 4 pages physiques. On peut donc avoir par exemple :







. page 0 : BIOS



. page 1 : page 2 et page 6 de la MegaROM



. page 2 : page 23 et page 9 de la MegaROM



. page 3 : RAM







Et tout reste toujours en adressage relatif, évidemment.







EDIT : j'ai modifié le vocabulaire pour ne pas se mêler les pinceaux entre slots et pages ...


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)
   
RibbSayan Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 19/08/2010 à 22h47

Messages: 154

Le 14/01/2011 à 13h25
J'ai un petit projet en asMSX (compilateur assembleur MSX) pour tester la MegaROM que décrit Metalion.
Ce qui m'a servi de base pour créer mon début de jeu. Si cela intéresse, je peux poster un tuto ce weekend.
   
granced Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 09/10/2009 à 09h18

Messages: 1512

Le 14/01/2011 à 13h47
Ce serait avec grand plaisir, pour ma part en tout cas !! ^^


MSX un jour, MSX toujours ! :D
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 14/01/2011 à 13h51
Idem ! :D


On est toujours ignorant avant de savoir.
Github    
granced Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 09/10/2009 à 09h18

Messages: 1512

Le 14/01/2011 à 14h26
Je m'en frotte les mains d'avance !! ^^


MSX un jour, MSX toujours ! :D
Site web    
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 781

Le 14/01/2011 à 19h08
C'est la complexité de la gestion des slots mémoire qui m'a fait lâcher l'assembleur sur MSX, je sens bien que je ne maitrise pas tout :oups
Ce post va peut être m'aider.


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
RibbSayan Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 19/08/2010 à 22h47

Messages: 154

Le 16/01/2011 à 18h45
Ca va venir.
J'avais eu pas mal de problème à faire tout fonctionner et là... J'ai a nouveau des problèmes :(
   
Walter Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 02/10/2009 à 19h33

Messages: 1883

Le 16/01/2011 à 20h12
Je sens que ça vient ... :love
Franck Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 22h54

Messages: 3345

Le 16/01/2011 à 21h10
Walter :
Je sens que ça vient ... :love




Ca tarde à venir quand même :gne Walter s'est endormi finalement :lol
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 16/01/2011 à 22h34
pas de bol tout est basé sur les systéme des slots dans la machine
il y a même des endroits dans les variables systémes ou sont stockés des données les concernant

donc je vous invite d'abord a lire une ou deux fois les pages 8 a 18 de pratique du MSX2 ( téléchargements ) et on en rediscute


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 17/01/2011 à 01h07
Jipe :
donc je vous invite d'abord a lire une ou deux fois les pages 8 a 18 de pratique du MSX2 ( téléchargements ) et on en rediscute




J'ai lu tout le Pratique du MSX2 et la section slot/page 2 fois. :D



Ceci dit, c'est pas du tout encore clair dans ma tête. :fou


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 17/01/2011 à 09h17
GDX :
Ce processeur accède à la mémoire par un adressage sur 8 bits. Ce qui permet de gérer 65536 adresses mémoire maximum.




Je suppose que tu voulais dire 16 bits ?


On est toujours ignorant avant de savoir.
Github    
RibbSayan Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 19/08/2010 à 22h47

Messages: 154

Le 17/01/2011 à 09h21
Le tuto va attendre un peu car j'ai un problème de changement de pages sur la MegaROM.

Je n'arrive pas à affecter le pagede 8ko désiré sur le 1/2 slot primaire ou secondaire.





; 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 example",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 (facile :)

ld [7000h],a ; Slot Primaire entre 6000h et 7FFFh mettre la sous-page 1

ld [9000h],a ; Slot Secondaire entre 8000h et 9FFFh mettre la sous-page 1

ld [0B000h],a ; 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:





En ce qui concerne l'affectation dessous-pages, j'ai essayé la commande SELECT a AT 6000h, ld [6000h],a mais rien n'y fait, je n'arrive pas à bien positionner les sous-pages... Je continue mes recherches. La structure est quasi-bonne.



Le code est compilable avec asMsx. Le fichier .sym vous donnera la correspondance des étiquettes avec les adresses.



Lancer la ROM avec blueMsx. Quand l'écran devient noir, ouvrez le debugger et appuyez sur pause. Normalement, vous devriez vous arrêter sur halt.

Vous pouvez visualiser la mémoire du Z80 (à 4000h, 6000h, 8000h et A000h)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2904

Le 17/01/2011 à 09h33
GDX :
À suivre… (Si ça intéresse bien sûr)




Oh que oui !



Un question, comment le début de la ROM de la cartouche (slot 1) s'est retrouvé en page 1 !? On peut choisir la page de départ d'une ROM ? Mais du coup, ça laisse moins de place pour le contenu.



Dans mon cas précis, j'aimerai pouvoir utiliser les 64 Ko d'une cartouche et 128 Ko de RAM sans memory-mapper.


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 17/01/2011 à 09h52
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)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie