MSX Village forum

La Place des Développeurs Changer le slot d'une page en assembleur

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 13/12/2021 à 21h01
Hello,

J'aime bien comprendre ce que je fais et ça m'amène souvent à réinventer la roue. ^^

Cette fois, j'essaye de faire un changement de slot manuellement (sans passer par le BIOS).
Ce que j'ai trouvé, c'est :
- On peut lire / écrire le slot principale via le port I/O A8h
- On peut lire / écrire le slot secondaire via l'adresse FFFFh (avec le slot principal sélectionné en page 3)

Par contre, je ne trouve pas où est stocké physiquement le fait qu'un slot est étendu ou non. :moue
Le BIOS utilise les adresses mémoires nommé EXPTBL (FCC1h~FCC4h), mais d'où vient cette info ?
Dans le code de démarrage du système y a forcement un mécanisme qui détermine ces valeurs... je devrais donc pouvoir accéder à ces infos via mon programme.

Une idée ? :hum


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

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 13/12/2021 à 21h57
Allez avoues que tu es en train d'écrire une nouvelle ROM principale pour remplacer les Bios existants... :|

Je pensais que c'était dans le livre Pratique du MSX2 d'Ascheberg. Je l'ai visionné mais ce n'est pas le cas.

La détection des Sous Slots se produit très tôt. Elle doit se produire lors du RST0. Il faudrait le source en C du Bios.


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 13/12/2021 à 23h04
Les sous-slots sont détecté juste avant que la ram soit selectionné en $C000, pour comprendre comment, il suffit de desassembler le debut de la routine du reset.


Toute matrice carrée sur un corps K, dont le polynôme caractéristique est scindé, est semblable à une matrice de Jordan. Cette réduction est unique à l'ordre des blocs près. De plus, toute matrice carrée nilpotente sur un corps K est semblable à une matrice de Jordan dont chaque bloc est associé à la valeur 0. Évidement, cette réduction est encore unique à l'ordre des blocs près...
:)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 13/12/2021 à 23h31
On m'a indiqué ce code sur MRC : https://sourceforge.net/p/msxsyssrc/git/ci/master/tree/base100/msxio.mac.
Mais bon, avec mon niveau d'assembleur, je suis pas sûr de tout capté.
J'ai l'impression que le test se limite à écrire une valeur en FFFFh après avoir sélectionné le slot principal via le port I/O A8h et de vérifier qu'on lit l'inverse.
Dans ce cas le slot est étendu ; sinon il ne l'est pas.
Ce que je comprends pas c'est que l'adresse FFFFh semble stocker 1 octet pour chacun des 4 slots principaux.
Cette mémoire est ou ? Pas en RAM apparemment.
C'est dans un composant électronique à part ?


KN2000 :
Allez avoues que tu es en train d'écrire une nouvelle ROM principale pour remplacer les Bios existants... :|


C'est déjà le cas. Mais jusqu'à présent, je laissais toujours la page 0 sur ma ROM (ou j'ai un gestionnaire d'interruption).
Là, ça serait pour pouvoir switch facilement la page 0 depuis les pages de mon programmes (pages 1 et 2 / 4000h~BFFFh).


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

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 13/12/2021 à 23h55
Tu peux aussi écrire un programme DOS. Mais il faut que ta cible soit équipée pour pouvoir lancer le DOS (par exemple, avoir un lecteur de disquette fonctionnel).

L'octet en FFFFh est plutôt associé aux pages que voit le Z80. Le résultat va dépendre des slots sélectionnés pour les 4 pages. Par exemple, si j'écris la valeur F0h (11 11 00 00 en binaire) dans FFFFh. Je vais demander le sous-slot 3 pour la page 3, le sous-slot 3 pour la page 2, le sous-slot 0 pour la page 1 et le sous-slot 0 pour la page 0. Et en lisant le contenu de FFFFh, je dois trouver 0Fh si tous les slots sélectionnés dans A8 sont étendus. Le principe doit être à peu près ça (je n'arrive pas à avoir la page que tu indiques).

Il vaut mieux ne pas modifier le sous-slot de la page où s’exécute ton programme et être prudent avec la page 3.

- Edit -

Il suffisait juste de retirer le point après mac. Du coup, c'est exactement ce qu'il te faut (c'est d'ailleurs ce que préconisait de faire Sector28). En plus, il y a déjà des étiquettes plus parlantes. C'est un peu hard à comprendre car c'est imbriqué avec la recherche de la RAM dans les différents Slots/Sous Slots du MSX. Et si mes souvenirs sont bons, il va retenir la combinaison slot/sous-slot où il y a le plus de RAM (le memory mapper n'entre pas en jeu). Edité par KN2000 Le 14/12/2021 à 00h12


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 14/12/2021 à 00h09
Le lien est corrigé.


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

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 14/12/2021 à 00h42
Euh, je crois qu'il faut voir ça à tête bien reposée.

Si ta routine de test est en page 0,
Tu récupères ta configuration des Slots avec le port A8.

Tu changes le slot de la page 1, par exemple, en sélectionnant 0.
Tu récupères la valeur contenu dans FFFFh.
Tu inverses b7 à b0 de cette valeur.
Tu mets à 1, b5 et b4 de cette valeur et tu l'écris dans FFFFh.
Tu relis FFFFh, si b5 et b4 sont à 0 (et ont donc été inversés), le Slot 0 est étendu.

- Edit -

La page que tu as trouvée est précieuse car commentée en grande partie.
Maintenant, reste à être sûr que la valeur reste inchangée (en binaire b7b6 11 b4b3 b2b1) si le slot 0 n'est pas étendu mais que l'on soit en cours d'utilisation du slot3 pour les pages 2 et 3 et que ce slot3 soit étendu, par exemple. Edité par KN2000 Le 14/12/2021 à 09h01


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 14/12/2021 à 09h52
Grauw sur MRC m'a expliqué que l'adresse FFFFh est memory-mapped vers un registre I/O.
Ce registre renvoi l'inverse de ce qu'on y écrit si le slot en page 3 est étendu.
C'est assez simple finalement. ^^

Le dernier point où j'ai un doute, c'est sur le fait que cette adresse soit memory-mapped aussi dans le cas d'un slot non-étendu.
Par ex., si une ROM était dans la page 3 d'un slot non étendu (ce qui n'a pas beaucoup de sens en pratique), est-ce qu'en accédant à FFFFh j'obtiendrai le contenu de la ROM à cette adresse ou est-ce que là aussi j'aurai le résultat du registre I/O ?


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10329

Le 14/12/2021 à 10h58
la mémorisation de la valeur de FFFFh est faite dans le LS273 qui se comporte comme une mémoire

voir l'explication en image ici : http://msxvillage.fr/forum/topic.php?id=3767#m84611


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 14/12/2021 à 13h10
Mais du coup, qu'en est-il sur les slots non-étendus ?
Est-ce que FFFFh est accessible normalement comme une autre adresse ?
Ou ce genre de montage existe aussi sur les slots non-étendus... uniquement dans le but de dire qu'ils ne sont pas étendus ?


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10329

Le 14/12/2021 à 15h36
si on prend un MSX 1 avec 64k de mémoire pour exemple on voit bien que l'adresse FFFFh n'est pas réservé aux slots étendus

des programmes se servaient même de cette adresse pour mémoriser une valeur de bank et sont devenus incompatibles avec le VG8020 qui avait un slot étendu

https://www.msx.org/wiki/Philips_VG-8020


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 14/12/2021 à 16h50
OK, mais du coup, ça veut dire que écrire une valeur en FFFFh et lire son inverse ne suffit pas à déterminer si un slot est étendu, non ?

Par ex., s'il y a une ROM sur un slot non-étendu avec la valeur 00h à l'adresse FFFFh : si j'essaye d'écris FFh à l'adresse FFFFh et relis cette adresse, je vais récupérer 00h (l'inverse) alors que le slot n'est pas étendu.
Ca ne fait que 1 chance sur 256 d'avoir une ROM avec la valeur inverse qu'on essaye d'écrire en FFFFh mais bon, ça me semble quand même vachement dangereux.

La seule solution qui me semble viable serait (en pseudo code) :
Code C :
 
A = (FFFFh) // récupérer la valeur en FFFFh
A++ // l'incrémenter
(FFFFh) = A // essayer de l'écrire
B = (FFFFh) // relire la valeur
si(B == inverse A) : Le slote est étendu
si(B == A) : RAM dans un slot non-étendu
sinon : ROM dans un slot non-étendu
 


Ou alors, il y a un truc qui m'échappe ?


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10329

Le 14/12/2021 à 17h38
si tu change la valeur de FFFFh tu risque de planter le MSX

essaye de mettre AAh dans un Sony ou un Panasonic pour voir

il ne faut pas toucher a la valeur du Bank C000h à FFFFh


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2698

Le 14/12/2021 à 18h04
Hum... j'ai l'impression de comprends de moins en moins... :oups

JIPEMSX :
si tu change la valeur de FFFFh tu risque de planter le MSX
essaye de mettre AAh dans un Sony ou un Panasonic pour voir


Pour changer le slot secondaire, on est bien censé modifier la valeur en FFFFh, non ?

Pareil pour détecter la présence de slot étendu, le BIOS essaye bien de modifier la valeur à cette adresse pour chaque slot au démarrage, non ?

Du coup, pourquoi ça planterai si c'est moi qui le fait ?

Je n'ai pas précisé, mais dans le cas d'un check de slot étendu, je parle évidement de modification "temporaire".
Dans ce cadre, je remettrai la valeur initial avant de passer au slot suivant.

C'est de ça dont tu parles pour le crash ?

JIPEMSX :
il ne faut pas toucher a la valeur du Bank C000h à FFFFh


Qu'entends-tu par "Bank" ?
Pour moi C000h à FFFFh c'est la "page" 3, et je vois pas ce qui empêche de la modifier quand elle pointe vers un slot de RAM.
En dehors de la zone réservé aux variables du BIOS.
C'est de ça dont tu parles ?


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1486

Le 14/12/2021 à 18h32
Sincèrement, pourquoi se prendre la tête alors que le BIOS fait ça très bien ?

Je sais que tu cherches à tout pouvoir faire sans le BIOS, mais il y a des choses pour lesquelles c'est plus compliqué sans.
Et pour lesquelles on ne gagne rien à ne pas utiliser le BIOS (en terme de performances je veux dire).

Après on peut voir ça comme un exercice intellectuel, mais ...


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