La Place des Développeurs MSX-DOS et la RAM kezako
Bonsoir, me voici de retour après une longue absence pour diverses raisons
Je m'intéresse au MSX-DOS sur les MSX2 et le domaine est vaste et pas forcement toujours clairement expliqué sur le net :-(
J'aurais plusieurs questions à vous soumettre, vos lumières seront les bien venues
Pour commencer voici ce que j'ai compris (n’hésitez pas à me corriger au cas ou) :
- Le MSX-DOS 2 ne peut booter que sur un MSX ayant une ROM MSX-DOS 2
- Le DOS utiliser la RAM la plus grande détecter au démarrage (donc pas forcément la MAIN-RAM interne du MSX).
- Le DOS pagine la RAM disponible en pages de 16 ko.
- Le DOS n'aime pas que l'on trifouille dans les slots sans passer par ces fonctions dédies
Maintenant les questions :
EN MSX-DOS 1
- Comment savoir sous DOS (en assembleur ou autre langage) combien de mémoire est disponible pour le DOS ?
- Comment connaitre le SLOT RAM utiliser par le DOS ( en assembleur) ?
- Quel est la "cartographie" mémoire de la RAM sous DOS ?
- Quelles sont les pages mémoires accessibles par le DOS ?
- Comment accéder aux différentes pages de la RAM disponible (en assembleur) ?
- Comment accéder à deux zones de RAM situés dans 2 slot différents ( Cartouche et MAIN-RAM par exemple) ?
Oui ca fait beaucoup de question mais je n'arrive pas à trouver d'infos précise sur ces questions
J'ai déjà fait des programmes ASM sous DOS mais sans jamais m'intéressé à la gestion de la RAM, et donc je voudrais pouvoir explorer cette possibilité
Je m'intéresse au MSX-DOS sur les MSX2 et le domaine est vaste et pas forcement toujours clairement expliqué sur le net :-(
J'aurais plusieurs questions à vous soumettre, vos lumières seront les bien venues
Pour commencer voici ce que j'ai compris (n’hésitez pas à me corriger au cas ou) :
- Le MSX-DOS 2 ne peut booter que sur un MSX ayant une ROM MSX-DOS 2
- Le DOS utiliser la RAM la plus grande détecter au démarrage (donc pas forcément la MAIN-RAM interne du MSX).
- Le DOS pagine la RAM disponible en pages de 16 ko.
- Le DOS n'aime pas que l'on trifouille dans les slots sans passer par ces fonctions dédies
Maintenant les questions :
EN MSX-DOS 1
- Comment savoir sous DOS (en assembleur ou autre langage) combien de mémoire est disponible pour le DOS ?
- Comment connaitre le SLOT RAM utiliser par le DOS ( en assembleur) ?
- Quel est la "cartographie" mémoire de la RAM sous DOS ?
- Quelles sont les pages mémoires accessibles par le DOS ?
- Comment accéder aux différentes pages de la RAM disponible (en assembleur) ?
- Comment accéder à deux zones de RAM situés dans 2 slot différents ( Cartouche et MAIN-RAM par exemple) ?
Oui ca fait beaucoup de question mais je n'arrive pas à trouver d'infos précise sur ces questions
J'ai déjà fait des programmes ASM sous DOS mais sans jamais m'intéressé à la gestion de la RAM, et donc je voudrais pouvoir explorer cette possibilité
la mémoire disponible dépend du nombre de disques et détermine la TPA
pour le slot ram utilisé lire les adresses suivantes
RAMAD0 #F341 1 Slot address of RAM in page 0 (DOS)
RAMAD1 #F342 1 Slot address of RAM in page 1 (DOS)
RAMAD2 #F343 1 Slot address of RAM in page 2 (DOS/BASIC)
RAMAD3 #F344 1 Slot address of RAM in page 3 (DOS/BASIC)
pour travailler avec 2 mémoires il faut utiliser le port A8
Primary slot select register
The 64k of MSX main memory is divided into four blocks of 16k, referred to as pages. This register controls which primary slot will be mapped to each page of memory.
PPI-register A (#A8) Bits Description
0-1 Slot for page 0 (#0000-#3FFF)
2-3 Slot for page 1 (#4000-#7FFF)
4-5 Slot for page 2 (#8000-#BFFF)
6-7 Slot for page 3 (#C000-#FFFF)
pour le slot ram utilisé lire les adresses suivantes
RAMAD0 #F341 1 Slot address of RAM in page 0 (DOS)
RAMAD1 #F342 1 Slot address of RAM in page 1 (DOS)
RAMAD2 #F343 1 Slot address of RAM in page 2 (DOS/BASIC)
RAMAD3 #F344 1 Slot address of RAM in page 3 (DOS/BASIC)
pour travailler avec 2 mémoires il faut utiliser le port A8
Primary slot select register
The 64k of MSX main memory is divided into four blocks of 16k, referred to as pages. This register controls which primary slot will be mapped to each page of memory.
PPI-register A (#A8) Bits Description
0-1 Slot for page 0 (#0000-#3FFF)
2-3 Slot for page 1 (#4000-#7FFF)
4-5 Slot for page 2 (#8000-#BFFF)
6-7 Slot for page 3 (#C000-#FFFF)
ericb59
Membre non connecté
Conseiller Municipal
Dos et Ram Map, Page 197-198 du livre FUSION-C Complete Journey
Le stack prend plus ou moins de place, ça dépend des variables qu'il doit stocker.
Avec Fusion-C on peut connaitre l'adresse la plus basse du stack en temps réél avec la commande : ReadSP();
en ASM :
Pour l'accès à la mémoire. Sous MSX-DOS en C comme en assembleur tu peux accéder aux 64K adréssés par MSX-DOS sans problèmes. Tu n'as rien de spéciale à faire.
Dans tous les cas. MSX-DOS n'adresse que 64K (MSX-DOS 2 aussi d'ailleurs)
Si tu veux utiliser d'autres segments de 16 Ko de Ram disponible sur la machine, il faut switcher les pages de 16K
Dans le livre FUSION-C Complete Journey c'est à la page 193
Par exemple sur une machine qui disposerai de 128K de ram
Elle a 8 segments de 16K numérotées de 0 à 7
Les pages mémoires restent les mêmes.
Si tu veux connecter la page 2 au segment 5 tu fais : out 0xFE,5
méthode brut de pomme !!
les registres à utiliser pour chaque page sont :
0xFC
0xFD
0xFE
0xFF
... Pourquoi programmer en Assembleur quand on peut programmer en C ?
Edité par ericb59 Le 13/06/2019 à 14h13
Le stack prend plus ou moins de place, ça dépend des variables qu'il doit stocker.
Avec Fusion-C on peut connaitre l'adresse la plus basse du stack en temps réél avec la commande : ReadSP();
en ASM :
Code ASM :
_ReadSP:: ld H,#0 ld L,#0 add HL,SP ret
Pour l'accès à la mémoire. Sous MSX-DOS en C comme en assembleur tu peux accéder aux 64K adréssés par MSX-DOS sans problèmes. Tu n'as rien de spéciale à faire.
Dans tous les cas. MSX-DOS n'adresse que 64K (MSX-DOS 2 aussi d'ailleurs)
Si tu veux utiliser d'autres segments de 16 Ko de Ram disponible sur la machine, il faut switcher les pages de 16K
Dans le livre FUSION-C Complete Journey c'est à la page 193
Par exemple sur une machine qui disposerai de 128K de ram
Elle a 8 segments de 16K numérotées de 0 à 7
Les pages mémoires restent les mêmes.
Si tu veux connecter la page 2 au segment 5 tu fais : out 0xFE,5
méthode brut de pomme !!
les registres à utiliser pour chaque page sont :
0xFC
0xFD
0xFE
0xFF
... Pourquoi programmer en Assembleur quand on peut programmer en C ?
Edité par ericb59 Le 13/06/2019 à 14h13
TurboSEB
Membre non connecté
Conseiller Municipal
Je confirme ces bouquins sont class ET pratique leurs grand format et leurs prix très correct (entre 12 et 15euros à la PGR) sont un plus
Pour mon cas j'ai acheté pratique du Msx maj par GDX et je trouve que c'est bien écrit et quand je le lis je comprends presque tout, c'est dire Edité par TurboSEB Le 13/06/2019 à 19h45
Pour mon cas j'ai acheté pratique du Msx maj par GDX et je trouve que c'est bien écrit et quand je le lis je comprends presque tout, c'est dire Edité par TurboSEB Le 13/06/2019 à 19h45
MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
Après quelques problèmes de connexions, j'ai enfin pu m'identifier pour répondre
Merci les gars pour tous ces renseignements qui vont m’être bien utiles
@Jipe: d'après ce que j'avais lu le MSX-DOS n'aime pas que l'on touche au port $A8, parceque j'utilise ce port pour des programmes ROM et je pensais ne pas pouvoir l'utiliser !!!
les adresses $F341 à $F344 vont bien me rendre service pour connaitre les slot RAM utilisé, je n'avais pas trouvé d'infos la dessus .
@EricB: un grand merci pour la Memory Map
Du coup je comprends que le DOS gère 64K (moins la scratch zone et la zone système avec la pile), mais on peut accéder malgrès tout à toute la RAM au dela de 64K.
Donc je peux changer de page avec les ports $FC à $FF c'est exactement ce que j'avais besoin
Si l'on veux utiliser une extension de RAM et la Main RAM et que j'utilise le port $A8 sous DOS je n'aurais pas de problème (bien entendu il faut bien que je remettre le port $A8 dans son état après usage) ?
Parceque les MSX2 ont au minimum 64ko de RAM et ca fait peux selon les besoins.
... Pourquoi programmer en C quand on peut programmer en Assembleur de manière évidente ?
Eric je n'ai rien contre le C puisque je l'utilise moi même, mais plutôt sur les machines plus récentes DOS, Windows, X68K ...
Mais pour des machines 8 bits l'assembleur me parait plus naturel et surtout pour le déboggage sous émulateur c'est quand même bien plus simple et compréhensible
Maintenant si BlueMsx ou OpenMsx on un débugger C intégré ca serait très pratique
Blague à part je vais essayer d'abord de maitriser la gestion de la RAM en ASM (car plus simple pour moins) et après je ferais la même chose avec Fusion-C .
Petite aparté : En tout cas c'est une très belle initiative de proposer ce C pour MSX, j'espère que cela permettra à certains de créer de nouveaux programmes ou jeux pour MSX
Merci les gars pour tous ces renseignements qui vont m’être bien utiles
@Jipe: d'après ce que j'avais lu le MSX-DOS n'aime pas que l'on touche au port $A8, parceque j'utilise ce port pour des programmes ROM et je pensais ne pas pouvoir l'utiliser !!!
les adresses $F341 à $F344 vont bien me rendre service pour connaitre les slot RAM utilisé, je n'avais pas trouvé d'infos la dessus .
@EricB: un grand merci pour la Memory Map
Du coup je comprends que le DOS gère 64K (moins la scratch zone et la zone système avec la pile), mais on peut accéder malgrès tout à toute la RAM au dela de 64K.
Donc je peux changer de page avec les ports $FC à $FF c'est exactement ce que j'avais besoin
Si l'on veux utiliser une extension de RAM et la Main RAM et que j'utilise le port $A8 sous DOS je n'aurais pas de problème (bien entendu il faut bien que je remettre le port $A8 dans son état après usage) ?
Parceque les MSX2 ont au minimum 64ko de RAM et ca fait peux selon les besoins.
... Pourquoi programmer en C quand on peut programmer en Assembleur de manière évidente ?
Eric je n'ai rien contre le C puisque je l'utilise moi même, mais plutôt sur les machines plus récentes DOS, Windows, X68K ...
Mais pour des machines 8 bits l'assembleur me parait plus naturel et surtout pour le déboggage sous émulateur c'est quand même bien plus simple et compréhensible
Maintenant si BlueMsx ou OpenMsx on un débugger C intégré ca serait très pratique
Blague à part je vais essayer d'abord de maitriser la gestion de la RAM en ASM (car plus simple pour moins) et après je ferais la même chose avec Fusion-C .
Petite aparté : En tout cas c'est une très belle initiative de proposer ce C pour MSX, j'espère que cela permettra à certains de créer de nouveaux programmes ou jeux pour MSX
J'ai fait quelques petits tests rapide en ASM ca fonctionne impeccablement
Du coup regardé du côté du C et le temps de trouver les bonnes fonctions ca donne le même le résultat (j'en doutais pas)
Les adresses données par Jipe ($F341-$F344) comporte non seulement le numéro de slot mais aussi le numéro de subslot (c'est du moins ce que j'en ai déduit d'après mes tests) :
Bit 7 indique [je suppose] si présent dans un sub-slot ou non ?
Bit 3 et 2 sub-slot
Bit 1 et 0 slot
les autres bits sont toujours à zéro d'après mes tests.
le port $A8 permet de switcher d'un slot à l'autre à condition de bien remettre ce port dans son état initiale si l'on ne veux pas
avoir de plantage avec le MSX-DOS
En tout cas vous m'avez bien aidé et ca m'a éviter de galérer à cherche encore plusieurs jours ....
A plus.
3 Captures pour les curieux
/\_/\
/\_/\
/\_/\
/\_/\
Edité par 6502man Le 15/06/2019 à 17h16
Du coup regardé du côté du C et le temps de trouver les bonnes fonctions ca donne le même le résultat (j'en doutais pas)
Les adresses données par Jipe ($F341-$F344) comporte non seulement le numéro de slot mais aussi le numéro de subslot (c'est du moins ce que j'en ai déduit d'après mes tests) :
Bit 7 indique [je suppose] si présent dans un sub-slot ou non ?
Bit 3 et 2 sub-slot
Bit 1 et 0 slot
les autres bits sont toujours à zéro d'après mes tests.
le port $A8 permet de switcher d'un slot à l'autre à condition de bien remettre ce port dans son état initiale si l'on ne veux pas
avoir de plantage avec le MSX-DOS
En tout cas vous m'avez bien aidé et ca m'a éviter de galérer à cherche encore plusieurs jours ....
A plus.
3 Captures pour les curieux
/\_/\
/\_/\
/\_/\
/\_/\
Edité par 6502man Le 15/06/2019 à 17h16
Justement je vais maintenant tester le moyen de trouver la RAM dans un autre SLOT en utilisant le port A8, mais je viens de me rendre compte que le DOS utilise la première RAM trouvée et non la plus grande ou alors c'est Bluemsx qui à tout faut :
NMS8250F + "inser spécial 64K external ram" dans le port cartouche 2 :
Par contre pour les SUB-SLOT la gestion est pas des plus simple et je suis pas sur d'avoir tout compris avec l'adresse $FFFF,
Les bits sont inversés et d'après ce que j'ai lu :
Bit 7 = expanded slot
bit 6-4 = null
bit 3-2 = numéro de SUB-SLOT
bit 1-0 = numéro de PRIMARY SLOT
Si j'ai bien compris il faut placé la page 3 en PRIMARY SLOT 0 puis lire l'adresse $FFFF pour connaitre l'état des SUB-SLOTS ????
NMS8250F + "inser spécial 64K external ram" dans le port cartouche 2 :
Par contre pour les SUB-SLOT la gestion est pas des plus simple et je suis pas sur d'avoir tout compris avec l'adresse $FFFF,
Les bits sont inversés et d'après ce que j'ai lu :
Bit 7 = expanded slot
bit 6-4 = null
bit 3-2 = numéro de SUB-SLOT
bit 1-0 = numéro de PRIMARY SLOT
Si j'ai bien compris il faut placé la page 3 en PRIMARY SLOT 0 puis lire l'adresse $FFFF pour connaitre l'état des SUB-SLOTS ????
Sector28
Membre non connecté
Villageois
si le slot est étendu, les bits sont inversés.
si le slot n'est pas étendu, c'est un octet de ram ordinaire (ou une adresse invalide).
l'inversion sert à savoir s'il y a slot étendu
lecture:
ld a,(ffff)
cpl
écriture:
ld (ffff),a
Edité par Sector28 Le 16/06/2019 à 20h50
si le slot n'est pas étendu, c'est un octet de ram ordinaire (ou une adresse invalide).
l'inversion sert à savoir s'il y a slot étendu
lecture:
ld a,(ffff)
cpl
écriture:
ld (ffff),a
Edité par Sector28 Le 16/06/2019 à 20h50
DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
Sector28
Membre non connecté
Villageois
en fait, il y a 1 registre de sélection de slot primaire (port A8) et 4 registres de sélection de slot secondaire, un par slot primaire (tous en FFFFh)
si le slot 0 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 0 (1er reg)
si le slot 1 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 1 (2eme reg)
si le slot 2 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 2 (3eme reg)
si le slot 3 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 3 (4eme reg)
si le slot 0 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 0 (1er reg)
si le slot 1 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 1 (2eme reg)
si le slot 2 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 2 (3eme reg)
si le slot 3 est sélectionné en page 3 (c000-ffff), les sous-slots concerne le slot primaire 3 (4eme reg)
DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
Sector28
Membre non connecté
Villageois
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie