http://6809.uk/ Émulateur Motorola 6809 en ligne

Les bonnes adresses méritant quelques minutes de votre temps.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
sporniket
Messages : 455
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par sporniket »

Je ne crois pas que ce site ait été cité par ici (tout du moins, mes recherche PHPBB ou Google n'ont pas trouvé de références)

Émulateur Motorola 6809 en ligne

En attendant que je configure une chaîne d'outillage pour développer sur MO5, je fais mes premiers pas en assembleur sur ce simulateur en ligne.

Et voici un petit "hello world" graphique à copier/coller/assembler/executer :

(edit : corrigé pour utiliser ABX au lieu de leax d,x)

Code : Tout sélectionner

;
;  Enter your 6809 assembly language program here
;  Press the Assemble button below
;
;  No errors? Press Run in the panel to the left
;  The CPU will stop on breakpoints (in red)
;  Press Run to continue
;


const textscreenbase=$0400
const graphscreenbase=$0600
const nextline=$20


start:
    leax helloworld,pcr
    ldy #graphscreenbase
    leay nextline,y
    leay nextline,y
    leay nextline,y
    leay nextline,y
    leay 11,y
    jsr draw_glyphes
    rts



**Draw a run of glyphes.
* --->
* @param x ptr to null terminated string of chars (US ASCII encoding)
* @param y ptr to first byte of display
* <---
* @no_change
* ----
draw_glyphes:
    pshs a,b,x,y
draw_glyphes_loop:
    ldb ,x+ ; b = next char
    beq draw_glyphes_done

    ; ptr glyph_map[a] = glyph_map + 2*a
    lslb

    pshs x ;--> setup call

    leax glyph_map,pcr
    abx
    ldx ,x
    bsr draw_glyph

    puls x ;<-- tear down call

    leay 1,y
    
    bra draw_glyphes_loop

draw_glyphes_done:
    puls a,b,x,y
    rts


**Draw a glyph.
* --->
* @param x ptr to glyph data
* @param y ptr to first byte of display
* <---
* @no_change
* ----
draw_glyph:
    pshs a,b,x,y
    ldb #8
draw_glyph_loop:
    lda ,x+
    sta ,y
    leay nextline,y
    decb
    bne draw_glyph_loop
draw_glyph_done:
    puls a,b,x,y
    rts

helloworld:
    fcb "HELLO WORLD",0

glyph_nul:
    fcb $7f,$41,$41,$41,$41,$41,$7f,$00
glyph_spc:
    fcb $00,$00,$00,$00,$00,$00,$00,$00
glyph_d:
    fcb $7c,$66,$66,$66,$66,$66,$7c,$00
glyph_e:
    fcb $7e,$60,$60,$78,$60,$60,$7e,$00
glyph_h:
    fcb $66,$66,$66,$7e,$66,$66,$66,$00
glyph_l:
    fcb $60,$60,$60,$60,$60,$60,$7e,$00
glyph_o:
    fcb $3c,$66,$66,$66,$66,$66,$3c,$00
glyph_r:
    fcb $7c,$66,$66,$7c,$66,$66,$63,$00
glyph_w:
    fcb $63,$6b,$6b,$6b,$7f,$36,$22,$00

glyph_map:
    ; 0 to 15
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    ; 16 to 31
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    ; 32 to 47
    fdb glyph_spc,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    ; 48 to 63
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    ; 64 to 79
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_d  ,glyph_e  ,glyph_nul,glyph_nul
    fdb glyph_h  ,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_l  ,glyph_nul,glyph_nul,glyph_o
    ; 80 to 95
    fdb glyph_nul,glyph_nul,glyph_r  ,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_w
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    ; 96 to 111
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_d  ,glyph_e  ,glyph_nul,glyph_nul
    fdb glyph_h  ,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_l  ,glyph_nul,glyph_nul,glyph_o
    ; 112 to 127
    fdb glyph_nul,glyph_nul,glyph_r  ,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_w
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
    fdb glyph_nul,glyph_nul,glyph_nul,glyph_nul
Dernière modification par sporniket le 26 oct. 2024 16:26, modifié 1 fois.
__sam__
Messages : 8359
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par __sam__ »

Chez Wide-Dot on connaissait ce site. Pratique pour maquetter/tester des petites routines.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 18085
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par Daniel »

Je connaissais aussi, je l'ai testé mais jamais vraiment utilisé.

Cet émulateur est parfait pour apprendre l'assembleur 6809. Par contre il ne permet pas de développer entièrement une application Thomson car il émule le processeur, mais pas son environnement matériel et logiciel. Un émulateur Thomson est nécessaire.

La bonne pratique est d'utiliser un assembleur sur PC pour générer un fichier binaire, de mettre au point ce fichier avec l'émulateur Thomson et de faire le test final avec la vraie machine.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
sporniket
Messages : 455
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par sporniket »

Et c'est exactement ce que je compte faire, mais le temps que mon mode opératoire soit opérationnel, je dispose de ce bac à sable pour me faire la main sur le jeu d'instruction 6809 en lui même (en assembleur, mon expérience porte sur le jeu d'instructions du 68000).

Par exemple, ça m'a permis de constater que "leax a,x" va uniquement opérer sur l'octet de poids faible de X, il faut plutôt que j'utilise le registre d (et donc charger ma valeur 8 bits dans le registre B tout en m'assurant que le registre A est bien à zéro -je réalise d'ailleurs que mon code ne le fait pas-)
__sam__
Messages : 8359
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par __sam__ »

sporniket a écrit : 26 oct. 2024 11:45Par exemple, ça m'a permis de constater que "leax a,x" va uniquement opérer sur l'octet de poids faible de X
Aïe, non pas du tout. C'est sign-extended à 16 bits et donc mets à jour tous les 16 bits du reg X. Il n'y a pas d'instruction officielle pour modifier uniquement les 8 bits de poids faible des registres d'adresse. Ces registres sont du 16 bits strict contrairement au registre de donnée qui est 8 ou 16 bits. C'est pareil sur le 68000 : les regs d'adresses sont tous 32bits non secables, les additions/soustraction 16bits y sont automatiquement sign-extended à 32bits.

Toutes les infos sont ici et .
il faut plutôt que j'utilise le registre d (et donc charger ma valeur 8 bits dans le registre B tout en m'assurant que le registre A est bien à zéro -je réalise d'ailleurs que mon code ne le fait pas-)
Sutout pas, LEAX D,X est juste hyper couteux (8 cycles, 2 octets). Si A=0, l'instruction ABX fait pareil (addition non signée) en 3 cycles et 1 octet.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
sporniket
Messages : 455
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par sporniket »

Ha, c'est intéressant.

J'avais au départ : Y = $40A8 et A = $90 ; et je faisais :

Code : Tout sélectionner

    leax a,x
J'obtiens alors : Y = $4038 au lieu de $4138

Voici le programme minimal de test :

Code : Tout sélectionner


start:
    ldx #$40A8
    lda #$90
    leax a,x
    rts
et le résultat que j'obtiens :

Capture d’écran du 2024-10-26 14-27-08.png
Capture d’écran du 2024-10-26 14-27-08.png (243.61 Kio) Consulté 1297 fois
Il faut que j'écrive le programme suivant pour obtenir le résultat voulu :

Code : Tout sélectionner


start:
    ldx #$40A8
    ldd #$90
    leax d,x
    rts
Capture d’écran du 2024-10-26 14-31-50.png
Capture d’écran du 2024-10-26 14-31-50.png (243.84 Kio) Consulté 1297 fois
Daniel
Messages : 18085
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par Daniel »

Le registre A est signé. La valeur $90 est négative et égale à -$70.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
sporniket
Messages : 455
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: http://6809.uk/ Émulateur Motorola 6809 en ligne

Message par sporniket »

Ha mais oui ! :oops:

EDIT:
__sam__ a écrit : 26 oct. 2024 13:01 l'instruction ABX fait pareil (addition non signée)

J'ai corrigé le source de mon premier message pour utiliser ABX, j'ai dû aussi intervertir X et Y.
Répondre