MSX Village forum

L'école Pratique du MSX2 corrigé et amélioré

GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 10/02/2015 à 09h12

Reprise du message précédent

Nouvelle version avec quelques corrections ici et là.

pratique du MSX.zip
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5540

Le 10/02/2015 à 10h43
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 ?


banniere-ericb59e
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 10/02/2015 à 12h01
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...
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1494

Le 10/02/2015 à 12h18
GDX :
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.


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

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5540

Le 10/02/2015 à 12h50
Metalion :


Effectivement.

Page 103 :







c'est ce que je disais, trop compliqué pour mon petit cerveau... :tea :gne

Personnellement j'ai plus besoin d 'infos claires et précises avec exemples...


banniere-ericb59e
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 10/02/2015 à 15h50
Ç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.
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5540

Le 10/02/2015 à 17h02
GDX :


PRINT HEX$(PEEK(&HF672)+PEEK(&HF673)*256)







ça c'est clair comme de l'eau de roche ! :D ;) Edité par ericb59 Le 10/02/2015 à 17h02


banniere-ericb59e
Site web    
granced Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 09/10/2009 à 09h18

Messages: 1509

Le 11/02/2015 à 08h47
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 :)


MSX un jour, MSX toujours ! :D
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 11/02/2015 à 09h20
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
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 11/02/2015 à 11h47
Merci pour ces lumières Granced :)


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5540

Le 11/02/2015 à 14h42
quand je disais que c'était clair, ça n'était pas une blague :gne

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


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5540

Le 20/02/2015 à 08h52
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) ?
:hum :heink


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5540

Le 20/02/2015 à 09h46
question 2 :
est-ce qu'avec : 00018H (Main-ROM) OUTDO - Sortie d'un caractère alphanumérique sur écran, imprimante ou disquette

je peux modifier des octets dans un fichier sur une disquette depuis le Basic ? Edité par ericb59 Le 20/02/2015 à 09h46


banniere-ericb59e
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 20/02/2015 à 10h42
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) ?

:hum :heink


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

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5540

Le 20/02/2015 à 11h45
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.





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...


banniere-ericb59e
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 20/02/2015 à 11h56
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