Expérimentation de l'Assembleur

un pet, un vic, un 64...

Modérateur : Politburo

Répondre
Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1060
Inscription : 21 août 2016 19:04

Expérimentation de l'Assembleur

Message par Ben » 17 oct. 2017 09:22

Salut,

Je me mets enfin doucement à l'assemble 6502. J'expérimente tout ça sur le C-128. Il a l'avantage d'avoir un monitor intégré. Voici un petit programme tout à fait génial, il fait bouger un caractère à l'écran (une boule). Lorsqu'il est à la fin de l'écran, il recommence au début :-)
Le truc, c'est que le programme en ASM est trop "rapide". Le VIC n'a pas le temps de rafraîchir son écran, que la boule est déjà 50 caractères plus loin.

Est-ce qu'il y a moyen d'avoir une interruption lorsque le VIC a fini de rafraîchir? Est-ce qu'il faut faire une boucle dans le programme pour le ralentir?

Code : Tout sélectionner

. 00c30  a9 00    lda #$00
. 00c32  85 80    sta $80
. 00c34  a9 04    lda #$04
. 00c36  85 81    sta $81
. 00c38  a0 00    ldy #$00
. 00c3a  a9 20    lda #$20
. 00c3c  91 80    sta ($80),y
. 00c3e  c8       iny
. 00c3f  a9 51    lda #$51
. 00c41  91 80    sta ($80),y
. 00c43  c0 fb    cpy #$fb
. 00c45  d0 f3    bne $0c3a
. 00c47  18       clc
. 00c48  a5 80    lda $80
. 00c4a  69 fa    adc #$fa
. 00c4c  85 80    sta $80
. 00c4e  90 e8    bcc $0c38
. 00c50  18       clc
. 00c51  a5 81    lda $81
. 00c53  69 01    adc #$01
. 00c55  85 81    sta $81
. 00c57  c9 07    cmp #$07
. 00c59  d0 dd    bne $0c38
. 00c5b  4c 30 0c jmp $0c30
De plus, est-ce que quelqu'un aurait une manière plus élégante de faire le "$81=$81+1" (aux adresses C51 à C53). Il faut pouvoir tester la valeur de cette adresse.

Ben

Avatar de l’utilisateur
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2870
Inscription : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: Expérimentation de l'Assembleur

Message par rogeroge » 17 oct. 2017 11:47

Bonjour.
Quoique étant NUL en assembleur, ma petite expérience consistait à placer des instructions nulles
du genre NOP pour ralentir le processus. Je ne sais pas si c'est valable pour ton listing.
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !

Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1060
Inscription : 21 août 2016 19:04

Re: Expérimentation de l'Assembleur

Message par Ben » 17 oct. 2017 13:33

Oui, ce serait une idée, mais je ne sais pas si ce genre d'instruction prend vraiment du temps. Sinon, je peux toujours faire une boucle d'attente.

Avatar de l’utilisateur
Gege34
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 657
Inscription : 03 oct. 2014 11:19
Localisation : 31

Re: Expérimentation de l'Assembleur

Message par Gege34 » 17 oct. 2017 14:25

Il serait préférable que tu te synchronise avec le balayage vidéo (voir Syncing to the raster beam et ici aussi) et tu ne fais le changement qu'à chaque (ou plus si tu veux ralentir) nouveau balayage.
Du Commodore (64/128/Amiga), De la HP (28/41/48/50/71) et quelques autres trucs (Ti, Canon X07, Psion, Casio, Palm)

Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1060
Inscription : 21 août 2016 19:04

Re: Expérimentation de l'Assembleur

Message par Ben » 21 oct. 2017 17:52

Salut Gege34, merci pour les deux liens. J'ai essayé d'utiliser l'IRQ. Ca fonctionne bien, le bout de code est appelé automatiquement tous les 1/50e de seconde, puis que je suis en PAL. Ca donne comme résultat que c'est plus lent qu'en BASIC. Par contre, pendant que la boule voyage, le C-128 continue à être utilisable. :-)

Mais je pense que je vais devoir fouiller dans les interruptions du VIC II.

Si ça intéresse quelqu'un, voici un autre code, qui fait la même chose que le précédent, mais je le trouve plus simple à comprendre. Il y a une boucle qui compte jusque 255 à la fin, mais ça reste toujours trop rapide.

Code : Tout sélectionner

d c00 c2a
. 00c00  a0 00    ldy #$00
. 00c02  84 80    sty $80
. 00c04  a9 04    lda #$04
. 00c06  85 81    sta $81
. 00c08  a9 51    lda #$51
. 00c0a  91 80    sta ($80),y
. 00c0c  e6 80    inc $80
. 00c0e  d0 08    bne $0c18
. 00c10  e6 81    inc $81
. 00c12  a5 81    lda $81
. 00c14  c9 07    cmp #$07
. 00c16  f0 e8    beq $0c00
. 00c18  a9 20    lda #$20
. 00c1a  91 80    sta ($80),y
. 00c1c  c8       iny
. 00c1d  a9 51    lda #$51
. 00c1f  91 80    sta ($80),y
. 00c21  88       dey
. 00c22  a2 ff    ldx #$ff
. 00c24  ca       dex
. 00c25  d0 fd    bne $0c24
. 00c27  4c 0c 0c jmp $0c0c
. 00c2a  60       rts

Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1060
Inscription : 21 août 2016 19:04

Re: Expérimentation de l'Assembleur

Message par Ben » 21 oct. 2017 18:08

Une petite chose amusante. Comment devenir malade tout en programmant sur le C-128 :-)
Il faut être en mode 40 colonnes. Avec le moniteur entrez le programme suivant:

ready.
monitor

Code : Tout sélectionner

. 00c00  78       sei
. 00c01  a9 0c    lda #$0c
. 00c03  8d 14 03 sta $0314
. 00c06  a9 0c    lda #$0c
. 00c08  8d 15 03 sta $0315
. 00c0b  58       cli
. 00c0c  ee 20 d0 inc $d020
. 00c0f  4c 65 fa jmp $fa65
Exécutez le avec un sys dec("0c00"). La couleur du bord va changer tous les 50e de sec. Mais le C-128 continue à être tout à fait utilisable.

Les codes qu'on trouve le net sont pour le C-64. L'adresse finale n'est pas la même sur le C-128. C'est pour ça que le JuMP se fait à l'adresse $FA65.

Si vous avez plus facile avec le basic:

Code : Tout sélectionner

10 for i=3072 to 3089
20 read a
30 poke i,a
40 next i
45 sys 3072
50 data120,169,12,141,20,3,169,12,141,21
,3,88,238,32,208,76,101,250
Un simple runstop/restore remet tout en ordre :-)

Ben

Répondre

Revenir vers « Commodore 8bits »