MSX Village forum

L'école clrhome.org un assembleur en ligne.

GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 03/02/2014 à 13h04
Bonjour,

http://clrhome.org/asm/

Est un assembleur en ligne qui peut s'avérer pratique pour faire des petits programmes en langage machine. On en avait parlé une fois sans arriver à quoi que ce soit avec.

J'ai un peu creusé la question et voici les quelques bases pour assembler quelque chose :

D'abord, double-cliquer sur l'onglet "hello.z80" pour nommer le fichier en assembleur.

Ensuite remplacer le programme d'exemple par un des codes suivants:

Code pour créer un fichier au format binaire (.BIN) :
Code TEXT :
.db$FE
.dwprgStart
.dwprgEnd
.dwprgExec
 
.org$D000
 
prgStart:
 
prgExec:
 
prgEnd:

Les 4 premères lignes constitues l'entête du fichier. Elle fait 7 octets. Le programme commence à l'adresse indiqué par ".org" (J'ai mis 0D000H pour l'exemple). Il se lance à l'adresse indiquée par prgExec lorsqu'on execute l'instruction BLOAD"name.bin",R ou DEFUSR=&HD000:A=USR(0) sous Basic. Les prgExec peuvent être supprimés si l'on remplace celui derrière le .dw par prgStart.

Code pour créer un fichier au format MSX-DOS (.COM) :
Code TEXT :
.org$100
jpprgStart
prgInfo:
.db"Program Name v.x.x by toto",0
prgStart:
 
prgEnd:

Un fichier .COM du MSX-DOS démarre toujours à l'adresse 0100h. Cependant, la norme stipule qu'à cette adresse, il devrait y avoir un "JP prgStart" suivit d'un petit texte (à "prgInfo:") pour décrire la commande suivit d'un zéro. Ce texte sera visible avec la commande HELP du MSX-DOS.

Code pour créer une ROM de 16Ko (.ROM) :
Code TEXT :
.db$41,$42
.dwprgStart
.dw0,0,0,0,0,0
 
.org$4000
 
prgStart:
 
prgEnd:
.ds$8000-prgEnd


Code pour créer une ROM de 32Ko (.ROM) :
Code TEXT :
.db$41,$42
.dwprgStart-$20
.dw0,0,0,0,0,0
 
.org$4000
 
; Routine de sélection de la ROM sur la plage de 8000h à BFFFh
.db$CD,$38,$01,$0F,$0F,$E6,$03,$4F,$06,$00,$21,$C1,$FC,$09,$7E,$E6
.db$80,$B1,$4F,$23,$23,$23,$23,$7E,$E6,$0C,$B1,$26,$80,$CD,$24,$00
 
prgStart:
 
prgEnd:
.ds$C000-prgEnd


Voilà, il ne vous reste plus qu'à écrire votre progamme entre les labels "prgStart:" (ou "runAddr:") et "prgEnd:".

Il faut juste faire attention aux points suivants :

  • Ne rien mettre derrière les labels. (Passez à la ligne suivante!)
  • ".org adrs" remplace l'habituel " org adrs".
  • "#define label adrs" remplace l'habituel"label equ adrs"
  • .db donnée" remplace l'habituel " db donnée".
  • .dw adrs" remplace l'habituel " dw adrs".
  • .ds longueur" remplace l'habituel " ds longueur".
  • Les valeurs hexadécimales sont souvent précédés d'un "#" sur MSX mais ce site utilise un "$" à la place. On peut aussi indiquer un nombre hexadécimal de façon classique, c'est à dire avec un "H" collé juste derrière. Dans ce cas, le nombre doit aussi toujours commencer par un chiffre de 0 à 9. Par exemple C000H provoque une erreur. Il faut donc mettre un 0 devant. 0C000H est pareil que $C000 donc.
  • Pour les valeurs binaires, le symbole utilisé est "%" placé devant le chiffre et la façon classique est un "B" collé juste derrière chiffre (sans espace entre les deux).

Une fois votre programme entré, cliquer sur "BUILD".
Si il n'y a pas d'erreur, cliquer sur "Download" dans le cadre où les messages du déroulement de l'assemblage s'affichent. Votre programme assemblé va se télécharger. :tchin

Ps: Pour sauvegarder le code source, il faut s'inscrire sur le site ou alors faire un copier/coller dans votre éditeur de texte préféré comme moi. ^^ Edité par GDX Le 23/06/2015 à 09h44
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 03/02/2014 à 14h15
Super :top
Tu irais pas un peu plus loin :siffle
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 04/02/2014 à 02h00
Ben il n'y a plus grand chose à dire. Tu peux essayer avec des exemples donnés sur le net ou dans le "Pratique du MSX" que je prépare en PDF.

Par exemple, cette routine :

http://www.msxvillage.fr/wiki/wiki.php?title=usr

doit être modifiée de la façon suivante pour être assemblable sur clrhome.org :

Code TEXT :
.db$FE
.dwprgStart
.dwprgEnd
.dwprgExec
 
.org$C000
 
prgStart:
;
CP 3
RET NZ; Retour au Basic si ce n'est pas une chaine
;
LD A,(DE); Longueur de la chaine
OR A
RET Z; Retour au Basic si longueur = 0
 
LD B,A; Nombre de caractères dans B pour DJNZ
Convc:
INC DE
LD A,(DE); Prend un caractère dans la chaine
CP 041H
JR C,NoChar; Si A < 041H, ce n'est pas une majuscule
CP 05AH
JR NC,NoChar; Si A > 064H, ce n'est pas une majuscule
OR 020H; Convertie la majuscule en minuscule
LD (DE),A; Place le caractère dans la chaine
NoChar:
DJNZ Convc
RET; retour au Basic
prgEnd:


Essaie, ce n'est pas compliqué ! Il y a juste l'adresse derrière "prgStart" à modifier, retirer la ligne "ORG 0C000H" et mettre chaque instruction qui se trouve derrière un label à la ligne suivante.

0C000H est un choix arbitraire. Tu peux mettre 0D000H si tu veux plus de place pour le programme Basic. Il faut mettre un CLEAR,&HD000-1 avant si le programme Basic est long pour ne pas écraser la routine. Edité par GDX Le 23/06/2015 à 09h48
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie