MSX Village forum

La Place des Développeurs MSX-DOS et la RAM kezako

6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 12/06/2019 à 23h12
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 :oups

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

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é ;)


Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 13/06/2019 à 13h15
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)


:noel
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5566

Le 13/06/2019 à 13h39
Dos et Ram Map, Page 197-198 du livre FUSION-C Complete Journey :p





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

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 ? :lol


Edité par ericb59 Le 13/06/2019 à 14h13


banniere-ericb59e
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5886

Le 13/06/2019 à 19h41
Je confirme ces bouquins sont class ET pratique :glass leurs grand format et leurs prix très correct (entre 12 et 15euros à la PGR) sont un plus :tea
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 :D Edité par TurboSEB Le 13/06/2019 à 19h45



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 14/06/2019 à 18h08
Après quelques problèmes de connexions, j'ai enfin pu m'identifier pour répondre :p

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

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 ? :D
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 :D
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 :top



Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 14/06/2019 à 18h36
attention de ne pas toucher au bank de C000 a FFFF , ça plante les variables systémes ;)


:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 15/06/2019 à 17h02
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


Site web    
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 561

Le 15/06/2019 à 21h35
le port A8 s'utilise conjointement avec l'adresse FFFF


DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
   
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 16/06/2019 à 10h05
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 ????


Site web    
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 561

Le 16/06/2019 à 19h14
FFFF fonctionne comme A8, mais pour les subslots (2 bits par slot)


DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 561

Le 16/06/2019 à 19h19
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


DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 561

Le 16/06/2019 à 19h48
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)



DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
   
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 16/06/2019 à 22h57
Okay mais le programme ce fige donc c'est pas encore ca ...

SLOT 3 en page 3 sur le port A8 => OR 0xC0 (positionne les bits 7 et 6 à 1 )

SUB-SLOT 2 à l'adresse $FFFF => $8B

???



Site web    
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 561

Le 17/06/2019 à 00h16
ton programme implanté en dessous de 0C000h
pas d'interruption (DI)
pointeur de pile en dessous de 0C000h ou ne pas l'utiliser
SUB-SLOT 2 à l'adresse $FFFF

ld a,(-1)
cpl
and 3Fh
or 80h
ld (-1),a


DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie