comment injecter du code binaire en assembleur Z80 dans un émulateur msx

Page 1/2
| 2

Par sergio max

Rookie (24)

Portrait de sergio max

18-08-2018, 11:42

Bonjour a tous. Je suis nouveau sur ce site et j'aimerai que l'on m'aide. A savoir comment injecter du code assembleur dans un émulateur msx.
mon site vg5000µ

!login ou Inscrivez-vous pour poster

Par gdx

Prophet (3091)

Portrait de gdx

21-08-2018, 11:05

Bienvenue,

La methode la plus simple est soit de créer un fichier .DSK dans lequel vous y mettez votre fichier binaire, soit un fichier .ROM.

L'entête d'un fichier binaire fait 7 octets (FEh, adresse de début, adresse de fin, adresse de d'execution).

Exemple en assembleur :

	org	8500h

Header:
	db	FEh
	dw	start,end,start

start:

;votre programme à la place de cette ligne

end:

L'entête d'un fichier ROM fait 16 octets (41h,42h, adresse de d'execution, et le reste de zero)

Exemple en assembleur :

	org	04000h

Header:
	db	41h,42h
	dw	start,0,0,0,0,0,0

start:

;votre programme à la place de cette ligne

end:
	ds	end-04000h

Jetez un oeuil dans le "wiki -> Programming" du site pour connaitre la carte de la mémoire ou autre. Ça peut aider.

Par rendomizer

Rookie (27)

Portrait de rendomizer

13-10-2018, 22:34

un simple "hello world" pour commencer ...

Par rendomizer

Rookie (27)

Portrait de rendomizer

29-10-2018, 22:35

J'ai essaillé mais sans resultat l'application msx2cas reconnait le fichier msx cas: bin mais je ne retrouve pas les données dans la mémoire en 8500h ???

Par rendomizer

Rookie (27)

Portrait de rendomizer

31-10-2018, 14:58

gdx wrote:
Bienvenue,

La methode la plus simple est soit de créer un fichier .DSK dans lequel vous y mettez votre fichier binaire, soit un fichier .ROM.

L'entête d'un fichier binaire fait 7 octets (FEh, adresse de début, adresse de fin, adresse de d'execution).

rendomizer wrote :

	.org	$c000

Header:
	.db	$FE
	.dw	start,end,start

 
; bios call to print a character on screen
CHPUT:        
.db $00a2

            ; the address of our program
             

start:
            ld hl, message
mainLoop:   
            ld a, (hl)
            cp 0
            ret z
            call CHPUT
            inc hl
            jr mainLoop

message:
            .db "Hello world!",0

            ; use the label "start" as the entry point
             
end:

Ca marche pô !?

Par gdx

Prophet (3091)

Portrait de gdx

03-11-2018, 06:20

Remplacez les deux lignes suivantes :

CHPUT:        
.db $00a2

Par celle-ci :

CHPUT  .equ $00a2

J'ai testé avec http://clrhome.org/asm/
ça marche. Essayez de trouver un assembleur plus standard, ça vous évitera de devoir modifier les instructions tout le temps.

Par rendomizer

Rookie (27)

Portrait de rendomizer

05-11-2018, 18:46

merci gdx. Pourquoi le label CHPUT n'a pas de " : " ? Quelle différence y a t il entre " equ et dw " ?

Par gdx

Prophet (3091)

Portrait de gdx

07-11-2018, 11:31

Les deux points sont là pour indiquer que le label prendra la valeur de l'adresse de cet endroit à la compilation, equ c'est pour spécifier une adresse soit-même et lorsqu'il n'y a rien, le label prend l'adresse déjà spécifiée par les deux point ou equ.

Par rendomizer

Rookie (27)

Portrait de rendomizer

07-11-2018, 22:43

merci gdx

Par rendomizer

Rookie (27)

Portrait de rendomizer

07-11-2018, 22:47

Pourquoi le sprite 2 a les mêmes data que le sprite 1 ???
https://msxpen.com/codes/-LQk83dB-TkifzQwBs-y

Par gdx

Prophet (3091)

Portrait de gdx

08-11-2018, 13:15

Selon la taille des sprites (8 ou 16), il y a une table de 64 ou 256 formes de sprite pour définir jusqu'à 32 sprites. Chaque sprite peu utiliser la même forme ou une différente. Je n'ai pas le temps de fouiller dans ton programme mais tu as sans doute spécifié la même forme pour ces deux sprites.

Page 1/2
| 2