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

Page 1/2
| 2

By sergio max

Rookie (24)

sergio max's picture

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 or register to post comments

By gdx

Prophet (3036)

gdx's picture

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.

By rendomizer

Rookie (27)

rendomizer's picture

13-10-2018, 22:34

un simple "hello world" pour commencer ...

By rendomizer

Rookie (27)

rendomizer's picture

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

By rendomizer

Rookie (27)

rendomizer's picture

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ô !?

By gdx

Prophet (3036)

gdx's picture

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.

By rendomizer

Rookie (27)

rendomizer's picture

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 " ?

By gdx

Prophet (3036)

gdx's picture

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.

By rendomizer

Rookie (27)

rendomizer's picture

07-11-2018, 22:43

merci gdx

By rendomizer

Rookie (27)

rendomizer's picture

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

By gdx

Prophet (3036)

gdx's picture

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