MSX Village forum

La Place des Développeurs Bonne pratique pour l'adresse de la pile

Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 26/11/2020 à 18h53

Reprise du message précédent

https://www.msx.org/wiki/Develop_a_program_in_cartridge_ROM#Search_for_RAM

sur msx avec disque, F341->F344

ENASLT ne fonctionne pas pour la page 0000-3FFF.

La ram du bank 0 doit donc être sélectionnée en dernier par CALSLT qui lancera ton programme.


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...
:)
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 26/11/2020 à 19h05
Arreter le moteur du lecteur de disquette avant de désactiver le bios:

Code :
        ld   b,0
_1:     push bc
        call $fd9f
        pop  bc
        djnz _1
 


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

Le 26/11/2020 à 21h50
Merci,
J'ai essayé de déchiffrer le code assembleur. Ce que j'en comprends, c'est que pour la Page 3, il se base sur le Slot actuellement sélectionné.
Et pour les autres pages, il y va brute-force et essayant d'écrire puis lire à l'adresse correspondante pour voir si c'est de la RAM (en partant du principe que l'écriture en ROM va échouer).
Intéressant.
Je suis étonné qu'il y ait pas une solution plus "propre" pour détecter la RAM. :hum

Pour les cartouches, on peut trouver leur entrée en cherchant "AB" en tête de page, mais comment savoir jusqu'ou elles s'étendent.
Une cartouche 32KB en page 1 et 2 par ex., aura son entête en 4000h, mais comment savoir que la page 1 est "occupé" et que les pages 0 et 3 et ce slot sont "vides" !?


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

Le 26/11/2020 à 22h45
Sector28 :
Arreter le moteur du lecteur de disquette avant de désactiver le bios:

Ah oui, j'ai lu que sinon il continue de tourner à l'infini ^^

Et sinon, j'ai testé les Read/Write/Read inter-slot et ça marche nickel... sauf pour les adresses en page 3 ou une simple lecture fait planter sur n'importe quel slot !
C'est ce qui explique que dans le code assembler Search_for_RAM, ils utilisent pas cette méthode pour la page 3 ?
Y a une explication rationnel à ce problème ? :moue

EDIT : Autre problème, je ne semble pas voir toute la RAM avec cette méthode. Par ex., sur un VG-8235 (via OpenMSX), je ne vois que les 64KB du slot 3-2 alors que la machine est censé avoir 128KB. J'ai aussi essayé avec un Turbo-R et je ne voyais aussi que 64K (slot 3-0) sur les 256K.


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

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 26/11/2020 à 23h11
aoineko :
Y a une explication rationnel à ce problème ? :moue

La pile se trouve en page 3

pour lire en page 3

Code :
org 0A000h
di
ld a,(-1)
cpl
ld c,a
in a,(0a8h)
ld b,a
and 3fh
or ??000000b  ; remplace ?? par le slot primaire (00,01,10 ou 11)
out (0a8),a
ld a,c
and 3fh
or ??000000b  ; remplace ?? par le slot secondaire (00,01,10 ou 11)
ld (-1),a
ld a,(hl)
ex af,af'
ld a,b
out (0a8h),a
ld a,c
ld (-1),a
ex af,af'
ei
Edité par Sector28 Le 26/11/2020 à 23h42


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...
:)
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 26/11/2020 à 23h19
au delà de 64k de ram dans un même slot, c'est un mapper, utilise les ports FC,FD,FE,FF



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

Le 26/11/2020 à 23h25
Oui, je viens de voir sur msx.org :

Code TEXT :
000Ch (RDSLT)
Function:    Reads one byte from memory of the slot specified.
Entry:    A = Slot ID to read (F000EEPP format)
HL = Address of byte to read (from 0000h to BFFFh)


Alors, si je comprends bien, ton code switch la page via le port A8h, lit un byte à l'adresse HL, reset la page et revoit le résultat dans A... le tout sans jamais utiliser la pile (d'où le ex/ex plutôt qu'une push/pop).

Je vais tester. Merci :top

Sector28 :
au delà de 64k de ram dans un même slot, c'est un mapper, utilise les ports FC,FD,FE,FF


Ah OK.
Pour l'instant, je vis dans un monde ou les mapper n'existent pas. :D
C'est déjà assez compliqué d'assimiler l'architecture de base des MSX.
Mais je garde l'info dans un coin de ma tête pour le jour ou j'aurai le courage d'ouvrir la boite de Pandore. ;)


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

Le 27/11/2020 à 00h29
Sector28 :
Code :

ld a,(-1)
cpl
ld c,a

...

ld a,c
ld (-1),a


Ca à l'air de marcher, mais c'est bizarre que le code backup la version inversée de SLTSL (FFFFh), mais restore la version non-inversée.
C'est le comportement attendu ?


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 27/11/2020 à 09h26
Je mets ici ces 2 documentations plutôt simples à lire (Pour qui la langue de Kelly Reilly n'est pas un problème. Sinon ces documents existent aussi dans la langue de Sara Sampaio pour les amateurs).

Juste au cas où...

Peut être c'est pas relatif à ce topics, (qui vient de dépasser mes compétences :lol )

MSX MEMORY 1

MSX MEMORY 2


banniere-ericb59e
Site web    
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 27/11/2020 à 09h50
Lorsque l'on lit FFFF, la valeur lue est toujours inversée, c'est un moyen d'indiquer la présence de slots étendus.


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

Le 27/11/2020 à 22h40
Sector28 :
Lorsque l'on lit FFFF, la valeur lue est toujours inversée, c'est un moyen d'indiquer la présence de slots étendus.


Oui, j'avais vu ça, mais ce que je comprends pas c'est pourquoi le code restore la version non-inversé... et que ça marche. ^^

Et sinon du coup, c'est bon, j'ai fait la routine pour écrire en page 3 et je peux donc détecter la RAM dans n'importe quelle page.
La faire en assembleur intégré au C a été une sacré gymnastique pour pas utiliser la pile ! :oups
Par contre, j'ai essayé une dizaine de machines virtuelles via OpenMSX, mais j'en ai trouvé aucune qui avait plus de un slot de RAM.
Tous les MSX de plus de 64KB utilisent des mappers ?


ericb59 :
Je mets ici ces 2 documentations plutôt simples à lire (Pour qui la langue de Kelly Reilly n'est pas un problème. [...]


Je connaissais le 1er mais pas le 2e. Je vais le lire de ce pas. :top


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

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 28/11/2020 à 00h08
je ré-explique:

ld a,0f0h
ld (-1),a ; maintenant FFFF contient F0, le slot secondaire 3 est sélectionné sur les page 2 et 3, 0 sur les autres.

ld a,(-1) ; maintenant A contient 0F, pas bon! :(
cpl ; maintenant A contient F0, bon! :)

L'inversion des bits se fait en lecture, pas en écriture.


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...
:)
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 28/11/2020 à 00h13
Sur mon Philips VG 8020, j'avais une VU 0034, et j'avais 128k ram au total, sans mapper.
Je ne pense pas qu'il existe des msx avec plus de 64k (en interne) sans mapper.


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...
:)
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10329

Le 28/11/2020 à 09h27
au vu des "Service Manual" que j'ai pu glaner et des vraies machines que j'ai ouvertes dès 128k de mémoire il y a forcément un mapper


:noel
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5791

Le 28/11/2020 à 10h24
Sector28 :
Sur mon Philips VG 8020, j'avais une VU 0034, et j'avais 128k ram au total, sans mapper.
Je ne pense pas qu'il existe des msx avec plus de 64k (en interne) sans mapper.


La on parle bien d'un Msx avec 64ko de Ram d'origine avec une cartouche Ram de 64ko dans un slot.

Le Memory Mapper c'est bien tout les composants type 74 LS 670 et qques autres que l'on place pour gérer cette Ram supplémentaire.

Pour exemple, sur le Sony HBG900P 64ko, c'est a base de LS670 en interne et sur sa cartouche d'extension HBI512.
Sur le HBG900AP, 512ko, c'est un Msx Engine (s1985 si je ne me trompe pas) en interne, jusqu'à 1024ko et je peu lui ajouté la cartouche HBI512 en plus si nécessaire.

Sachant que le plus gros mapper est pris en compte au démarrage sur Msx2 (Msx1 je ne sais plus)
Donc est-ce que le VG8020 prend en compte réellement les 128ko en natif ? Ah mon avis Oui, si MsxDos2, ou programmation en Language Machine. Donc accessible aux sachant. Pour l'exemple du HBG900P, l'ordinateur conciderera les 512ko, les 64ko natif seront existants mais pas accessible à tous. C'est la même chose pour le VDP Msx2, extensible a 192ko dont la bank 64ko, n'est pas reconnue sous basic mais seulement en language machine.

C'est ça le Memory Mapper ou j'ai rien capter ? :tea





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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2696

Le 28/11/2020 à 11h04
Sector28 :
je ré-explique:

ld a,0f0h
ld (-1),a ; maintenant FFFF contient F0, le slot secondaire 3 est sélectionné sur les page 2 et 3, 0 sur les autres.

ld a,(-1) ; maintenant A contient 0F, pas bon! :(
cpl ; maintenant A contient F0, bon! :)

L'inversion des bits se fait en lecture, pas en écriture.


FFFFh n'est pas un emplacement mémoire standard ?
Comment se fesse que ce qu'on n'y écrit et ce qu'on y lit soit inversé !?
Il y a un comportement hardware spécifique ? Un hook ? Une interruption ?
Ca me perturbe :fou


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie