L'école Pratique du MSX2 corrigé et amélioré
Reprise du message précédent
Nouvelle version avec quelques corrections ici et là.pratique du MSX.zip
ericb59
Membre non connecté
Conseiller Municipal
Merci GDX.
ce bouquin est très intéressant.
J'aime beaucoup les cas pratiques à la fin.
Par contre, j'ai beaucoup de mal à retrouver certaines infos.
L'autre jour par exemple je cherchais les adresses début et fin du Basic.
Je n'ai pas vraiment trouvé dans le bouquin... ou alors c'est pas assez clair pour mon petit cerveau.
(8000h à FFFFH)
IL y a aussi d'autres infos dans le technical handbook du MSX2, ca serait bien de regrouper les 2 en un seul ouvrage ?
ce bouquin est très intéressant.
J'aime beaucoup les cas pratiques à la fin.
Par contre, j'ai beaucoup de mal à retrouver certaines infos.
L'autre jour par exemple je cherchais les adresses début et fin du Basic.
Je n'ai pas vraiment trouvé dans le bouquin... ou alors c'est pas assez clair pour mon petit cerveau.
(8000h à FFFFH)
IL y a aussi d'autres infos dans le technical handbook du MSX2, ca serait bien de regrouper les 2 en un seul ouvrage ?
Ce genre d'info se trouvent dans les variables du système. Le problème c'est qu'elles sont décrites souvent que très vaguement. J'ai apporté pas mal de précisions mais c'est encore loin d'être suffisant. Ça se fera petit à petit. Jusqu'à maintenant seul Jipé a donné des corrections à faire.
Autrement, j'ai ajouté la carte de la mémoire principale dans le chapitre 2 "Les Slots et le Memory Mapper". J'hésite à en faire un petit chapitre juste avant...
Autrement, j'ai ajouté la carte de la mémoire principale dans le chapitre 2 "Les Slots et le Memory Mapper". J'hésite à en faire un petit chapitre juste avant...
GDX :
Ce genre d'info se trouvent dans les variables du système.
ericb59 :
L'autre jour par exemple je cherchais les adresses début et fin du Basic.
Je n'ai pas vraiment trouvé dans le bouquin... ou alors c'est pas assez clair pour mon petit cerveau.
Je n'ai pas vraiment trouvé dans le bouquin... ou alors c'est pas assez clair pour mon petit cerveau.
Ce genre d'info se trouvent dans les variables du système.
Effectivement.
Page 103 :
Code :
0F672H MEMSIZ 2 Adresse de la dernière case mémoire disponible sous Basic. Modifié par l'instruction « CLEAR »
0F676H TXTTAB 2 Adresse de début des programmes Basic
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)
ericb59
Membre non connecté
Conseiller Municipal
Metalion :
Effectivement.
Page 103 :
Effectivement.
Page 103 :
c'est ce que je disais, trop compliqué pour mon petit cerveau...
Personnellement j'ai plus besoin d 'infos claires et précises avec exemples...
Ça veut dire qu'il faut lire les 2 octets à partir de cette adresse mémoire pour connaitre l'adresse de fin du Basic.
Sur MSX, le premier octet contient les 8 bits de poids faible et le deuxième les 8 bits de poids fort. Donc pour remettre ça en ordre et en hexa sous Basic, il faut entrer ça :
PRINT HEX$(PEEK(&HF672)+PEEK(&HF673)*256)
"MEMSIZ", c'est juste un nom donné pour se retrouver dans les programmes sources en assembleur. On est pas obligé d'en tenir compte pour faire ses propres programmes.
Sur MSX, le premier octet contient les 8 bits de poids faible et le deuxième les 8 bits de poids fort. Donc pour remettre ça en ordre et en hexa sous Basic, il faut entrer ça :
PRINT HEX$(PEEK(&HF672)+PEEK(&HF673)*256)
"MEMSIZ", c'est juste un nom donné pour se retrouver dans les programmes sources en assembleur. On est pas obligé d'en tenir compte pour faire ses propres programmes.
Traduction et exemple : imaginons que l'adresse de début soit 25172 (nombre totalement arbitraire à titre d'exemple) : en hexa ça donne 6254. L'adresse se scinde en un octet de poids fort (62) et un octet de poids faible (54), car comme tu le sais sans doute, une adresse ne contient qu'un octet. Pour avoir ton adresse, il faut donc aller chercher ces 2 octets : l'adresse de l'octet de poids faible est celle qui t'es donnée : F672, et la suivante, F673 donne celle de poids fort. Il faut la multiplier par 256 pour pouvoir l'additionner à la précédente, d'où la formule de GDX :
- PEEK(&HF672) récupère la valeur de l'octet de poids faible
- PEEK(&HF673)*256 récupère la valeur de l'octet de poids fort et le multiplie par 256
- (PEEK(&HF672)+PEEK(&HF673)*256) donne la valeur finale de l'adresse, en entiers
- HEX$(PEEK(&HF672)+PEEK(&HF673)*256) donne cette valeur en hexadécimal
- et enfin PRINT HEX$(PEEK(&HF672)+PEEK(&HF673)*256) t'affiche cette valeur
- PEEK(&HF672) récupère la valeur de l'octet de poids faible
- PEEK(&HF673)*256 récupère la valeur de l'octet de poids fort et le multiplie par 256
- (PEEK(&HF672)+PEEK(&HF673)*256) donne la valeur finale de l'adresse, en entiers
- HEX$(PEEK(&HF672)+PEEK(&HF673)*256) donne cette valeur en hexadécimal
- et enfin PRINT HEX$(PEEK(&HF672)+PEEK(&HF673)*256) t'affiche cette valeur
MSX un jour, MSX toujours !
Je précise que Pratique du MSX2 est à la base une description du système des MSX2 principalement pour les développeurs en assembleur. Il permet accessoirement de connaitre la structure, les variables du système et donne quelques routines utilisables pour les autres.
Pratique du MSX continue dans le même esprit mais pour tous les MSX en général. Il parle même des MSX japonais et même autant que possible des autres.
Depuis peu, il parle aussi du MSX-DOS de la même façon que le reste (Structure, Bios, variables, etc).
Bref, il y a le principal pour les développeurs qui connaissent déjà plus ou moins l'assembleur. Ce n'est pas un livre sur le Basic ni les commandes du DOS. Il ne s'adresse pas aux tout débutants. Edité par GDX Le 11/02/2015 à 14h37
Pratique du MSX continue dans le même esprit mais pour tous les MSX en général. Il parle même des MSX japonais et même autant que possible des autres.
Depuis peu, il parle aussi du MSX-DOS de la même façon que le reste (Structure, Bios, variables, etc).
Bref, il y a le principal pour les développeurs qui connaissent déjà plus ou moins l'assembleur. Ce n'est pas un livre sur le Basic ni les commandes du DOS. Il ne s'adresse pas aux tout débutants. Edité par GDX Le 11/02/2015 à 14h37
ericb59
Membre non connecté
Conseiller Municipal
quand je disais que c'était clair, ça n'était pas une blague
Je veux bien être considéré comme débutant...
C'est vrai que niveau connaissance de la structure du MSX je ne vol pas très haut...
Mais j'ai dépassé le niveau "Mettre une cartouche et jouer"
Je veux bien être considéré comme débutant...
C'est vrai que niveau connaissance de la structure du MSX je ne vol pas très haut...
Mais j'ai dépassé le niveau "Mettre une cartouche et jouer"
ericb59
Membre non connecté
Conseiller Municipal
Question !
Sur BlueMSX avec l'émulation MSX2 French
Si je fait PRINT FRE(0) j'obtiens : 23432
si je fais PRINT HEX$(PEEK(&HF672)+PEEK(&HF673)*256)
j’obtiens : DC61
donc ma zone mémoire libre en basic s'étend de 8000H à DC61H c'est bien ça ?
Alors pourquoi quand je fais : Print &HDC61-&h8000 j'obtiens 23649 ?
Ne devrais je pas avoir le même nombre qu'avec PRINT FRE(0) ?
Sur BlueMSX avec l'émulation MSX2 French
Si je fait PRINT FRE(0) j'obtiens : 23432
si je fais PRINT HEX$(PEEK(&HF672)+PEEK(&HF673)*256)
j’obtiens : DC61
donc ma zone mémoire libre en basic s'étend de 8000H à DC61H c'est bien ça ?
Alors pourquoi quand je fais : Print &HDC61-&h8000 j'obtiens 23649 ?
Ne devrais je pas avoir le même nombre qu'avec PRINT FRE(0) ?
ericb59
Membre non connecté
Conseiller Municipal
ericb59 :
donc ma zone mémoire libre en basic s'étend de 8000H à DC61H c'est bien ça ?
Alors pourquoi quand je fais : Print &HDC61-&h8000 j'obtiens 23649 ?
Ne devrais je pas avoir le même nombre qu'avec PRINT FRE(0) ?
Alors pourquoi quand je fais : Print &HDC61-&h8000 j'obtiens 23649 ?
Ne devrais je pas avoir le même nombre qu'avec PRINT FRE(0) ?
Je n'ai pas vérifié mais PRINT FRE(0) doit sans doute indiquer la mémoire libre restante. (Mémoire utilisateur - la place réservée aux variables du Basic - la taille du listing Basic).
PRINT HEX$((PEEK(&HF672)+PEEK(&HF673)*256))-&h8000) doit afficher la Mémoire utilisateur.
ericb59 :
je peux modifier des octets dans un fichier sur une disquette depuis le Basic ?
Pas directement, il faut passer par une petite routine en machine au moins pour paramétrer le registre A du Z80.
ericb59
Membre non connecté
Conseiller Municipal
GDX :
Je n'ai pas vérifié mais PRINT FRE(0) doit sans doute indiquer la mémoire libre restante. (Mémoire utilisateur - la place réservée aux variables du Basic - la taille du listing Basic).
PRINT HEX$((PEEK(&HF672)+PEEK(&HF673)*256))-&h8000) doit afficher la Mémoire utilisateur.
Je n'ai pas vérifié mais PRINT FRE(0) doit sans doute indiquer la mémoire libre restante. (Mémoire utilisateur - la place réservée aux variables du Basic - la taille du listing Basic).
PRINT HEX$((PEEK(&HF672)+PEEK(&HF673)*256))-&h8000) doit afficher la Mémoire utilisateur.
Quand j'ai fait le test indiqué plus haut, c'était sans listing basic en mémoire et juste après un reset.
Donc aucune variable, et rien en mémoire...
Donc une différence de 217 octets... J'aimerai comprendre pourquoi...
CLEAR réserve de la mémoire pour les variables. Cette place est réservée par défaut même sans entrer un CLEAR une seule fois. Que tu entres des variables ou non cette place est prise.
Edité par
GDX
Le 20/02/2015 à 12h18
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie