La Place des Développeurs Slots / Pages / Mégarom : Comment ça marche ?
granced :
aoineko :
Pas mieux. Et c'est pas faute de lire et relire les bouquins Je m'y perd un peu au niveau des histoires de slots et de pages.
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)
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
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
aoineko
Membre non connecté
Conseiller Municipal
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.
Ceci dit, c'est pas du tout encore clair dans ma tête.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
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.
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)
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
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.
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 !
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