La Place des Développeurs Bonne pratique pour l'adresse de la pile
Sector28
Membre non connecté
Villageois
Reprise du message précédent
https://www.msx.org/wiki/Develop_a_program_in_cartridge_ROM#Search_for_RAMsur 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.
DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
Sector28
Membre non connecté
Villageois
aoineko
Membre non connecté
Conseiller Municipal
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.
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" !?
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.
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.
aoineko
Membre non connecté
Conseiller Municipal
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 ?
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.
Sector28
Membre non connecté
Villageois
aoineko :
Y a une explication rationnel à ce problème ?
La pile se trouve en page 3
pour lire en page 3
Code :
Edité par
Sector28
Le 26/11/2020 à 23h42
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
DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
aoineko
Membre non connecté
Conseiller Municipal
Oui, je viens de voir sur msx.org :
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
Ah OK.
Pour l'instant, je vis dans un monde ou les mapper n'existent pas.
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.
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
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.
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.
aoineko
Membre non connecté
Conseiller Municipal
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.
ericb59
Membre non connecté
Conseiller Municipal
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 )
MSX MEMORY 1
MSX MEMORY 2
Juste au cas où...
Peut être c'est pas relatif à ce topics, (qui vient de dépasser mes compétences )
MSX MEMORY 1
MSX MEMORY 2
Sector28
Membre non connecté
Villageois
aoineko
Membre non connecté
Conseiller Municipal
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 !
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.
On est toujours ignorant avant de savoir.
Sector28
Membre non connecté
Villageois
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.
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.
DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
Sector28
Membre non connecté
Villageois
TurboSEB
Membre non connecté
Conseiller Municipal
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.
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 ?
MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
aoineko
Membre non connecté
Conseiller Municipal
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.
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
On est toujours ignorant avant de savoir.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie