Derniers sujets
» HRC (Hires RLE Compressed)
mon premier petit programme en 100% assembleur :) EmptyMar 15 Oct 2019 - 20:16 par Hialmar

» CEO-MAG 354
mon premier petit programme en 100% assembleur :) EmptyDim 13 Oct 2019 - 10:14 par didierv

» Version compatible 64 bits de WAVtoTAP ?
mon premier petit programme en 100% assembleur :) EmptySam 12 Oct 2019 - 16:48 par markerror

» Lot de livres et revues Oric sur LBC
mon premier petit programme en 100% assembleur :) EmptyVen 11 Oct 2019 - 21:37 par didierv

» rs
mon premier petit programme en 100% assembleur :) EmptyMer 9 Oct 2019 - 0:29 par kenneth

» Écriture stylée sur MCP 40
mon premier petit programme en 100% assembleur :) EmptyDim 6 Oct 2019 - 17:38 par Dbug

» CEO-MAG 353
mon premier petit programme en 100% assembleur :) EmptyDim 6 Oct 2019 - 15:27 par Symoon

» Vieumikro 2019
mon premier petit programme en 100% assembleur :) EmptyLun 30 Sep 2019 - 16:34 par Hialmar

» [sujet Public] - le Ceo-Mag
mon premier petit programme en 100% assembleur :) EmptyDim 29 Sep 2019 - 22:31 par didierv

» Vidéos en anglais
mon premier petit programme en 100% assembleur :) EmptyDim 29 Sep 2019 - 15:22 par Dbug

» Nouvelles commandes SEDORIC
mon premier petit programme en 100% assembleur :) EmptySam 28 Sep 2019 - 20:57 par Sheld67

» A venir: nouvelle version TAP2WAV
mon premier petit programme en 100% assembleur :) EmptyMer 25 Sep 2019 - 21:03 par Symoon

» Twilighte card, 6502 et joysticks
mon premier petit programme en 100% assembleur :) EmptyMar 24 Sep 2019 - 12:29 par Jede

» Boitier Oric HD
mon premier petit programme en 100% assembleur :) EmptyLun 23 Sep 2019 - 12:58 par Jede

» OSDK & gnu/Linux...
mon premier petit programme en 100% assembleur :) EmptyVen 20 Sep 2019 - 4:39 par Symoon

Qui est en ligne ?
Il y a en tout 3 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 3 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 193 membres enregistrés
L'utilisateur enregistré le plus récent est Oric Man

Nos membres ont posté un total de 7938 messages dans 684 sujets
Portail ORIC




mon premier petit programme en 100% assembleur :)

Aller en bas

mon premier petit programme en 100% assembleur :) Empty mon premier petit programme en 100% assembleur :)

Message par goyo le Jeu 28 Fév 2019 - 18:57

Je suis fier de vous montrer mon premier mini programme en pur assembleur ...   Cool

j'ai osé faire le pas de passer de l'asm(); au fichier.s !

c'est une micro demo qui fait bouger mon personnage (Cwadia) de haut en bas en boucle ... oui .. c'est tout ... Shocked
happy

Code:


#define _rom_hires $ec33

#define HIR_ADDR $a000

_main
 
 ; Switch to hires
 
 jsr _rom_hires
 
 lda #20  ; x
 sta posx
 tax
 lda #169 ; y
 sta posy
 tay
 
 loop
 nop
 suite8
 sty posy
 
 jsr _disp_spr
 jsr _wait
 ldy posy
 dey
 bne suite8
 clc
 ldy #0
 suite9
 
 sty posy
 jsr _disp_spr
 jsr _wait
 ldy posy
 iny
 cpy #169
 bne suite9
 clc
 bcc loop
 
 ; ralentissement vonlontaire
_wait
 ldy #32
 wait1
 ldx #32
 wait2
 clc
 dex
 bne wait2
 dey
 bne wait1
rts

_disp_spr

 ; store _cwad1 sprite address in read
 lda #<_cwad1
 sta read+1
 lda #>_cwad1
 sta read+2
 ; store hires address in position
 lda #<HIR_ADDR
 sta position
 lda #>HIR_ADDR
 sta position+1
 ; calculate y position (ypos=40*y
 ldy posy
 suite5
 clc
 lda position
 adc #40
 bcc suite6
 inc position+1
 suite6
 sta position
 
 dey
 bne suite5
 clc
 ; add x position
 lda position
 adc posx
    bcc suite7
 inc position+1
 suite7
 sta position
 
 ; create write address
 lda position
 sta write+1
 lda position+1
 sta write+2
 
 ldy #31 ; y=spr height
 suite2
 clc
 ldx #0 ; x=spr width
 suite1
read
 lda $1234,x  
write
 sta $1234,x
 
 inx
 cpx #4
 bne suite1
 clc ; for cpx
 lda write+1
 adc #40
 
 bcc suite3
 inc write+2
 suite3
 clc
 sta write+1
 ; increment spr read with 4
 lda read+1
 adc #4
 bcc suite4
 inc read+2
 suite4
 sta read+1
 
 dey
 bne suite2
rts

_cwad1
 .byt $7F,$70,$43,$7F
 .byt $7F,$60,$40,$7F
 .byt $7E,$40,$41,$5F
 .byt $7C,$57,$47,$4F
 .byt $7C,$7F,$6C,$47
 .byt $78,$7F,$60,$43
 .byt $78,$48,$70,$43
 .byt $71,$77,$50,$41
 .byt $71,$55,$58,$41
 .byt $70,$47,$58,$41
 .byt $73,$70,$78,$41
 .byt $67,$7B,$78,$41
 .byt $63,$77,$78,$41
 .byt $60,$6F,$7F,$41
 .byt $63,$7D,$7F,$41
 .byt $71,$7D,$7C,$41
 .byt $70,$5A,$5C,$43
 .byt $78,$67,$78,$47
 .byt $7C,$5F,$70,$4F
 .byt $7E,$40,$40,$4F
 .byt $76,$43,$7C,$45
 .byt $78,$46,$7C,$63
 .byt $7F,$6B,$76,$5F
 .byt $7F,$6A,$73,$5F
 .byt $7F,$40,$40,$5F
 .byt $7F,$53,$7B,$5F
 .byt $7F,$67,$7C,$5F
 .byt $7F,$70,$41,$7F
 .byt $7F,$7B,$4D,$7F
 .byt $7F,$78,$61,$7F
 .byt $7F,$71,$41,$7F
 .byt $7F,$7F,$7F,$7F
 

position .dsb  2;
posx .byt 10
posy .byt 50
goyo
goyo

Messages : 178
Date d'inscription : 02/05/2014
Age : 48
Localisation : Massy

Revenir en haut Aller en bas

mon premier petit programme en 100% assembleur :) Empty Re: mon premier petit programme en 100% assembleur :)

Message par Dbug le Sam 2 Mar 2019 - 9:01

Bon début Smile

Question, c'est quel assembler, XA?

_________________

Dbug
Dbug

Messages : 207
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

mon premier petit programme en 100% assembleur :) Empty Re: mon premier petit programme en 100% assembleur :)

Message par Dbug le Sam 2 Mar 2019 - 9:14

Quelques astuces Smile

Si tu utilises XA, tu n'es pas obligé d'inventer des labels "suite1", "suite2", etc... pour toutes les petites routines d'addition, tu peux juste utiliser des blocs locaux.

Donc au lieu de :
Code:
 clc ; for cpx
 lda write+1
 adc #40
 bcc suite3
 inc write+2
suite3
 clc
 sta write+1

 ; increment spr read with 4
 lda read+1
 adc #4
 bcc suite4
 inc read+2
suite4
 sta read+1
tu peux faire ca:

Code:
 
.(
 clc ; for cpx
 lda write+1
 adc #40
 bcc suite
 inc write+2
suite
 clc
 sta write+1
.)

.(
 ; increment spr read with 4
 lda read+1
 adc #4
 bcc suite
 inc read+2
suite
 sta read+1
.)
comme ca tu peux utiliser "suite" de partout, le symbol n'est pas visible a l'extérieur des blocs .( .)

A la place de la multiplication par 40, en général on utilise directement une table qui contient les valeurs 0, 40, 80, ...

Et vu qu'en général, on ajoute l'adresse de départ de l'écran, au final on obtient une table qui contient l'adresse qui va bien déjà calculée:

TextAddressesLow .byt <$a0000+0*40,<$a0000+1*40,<$a0000+2*40,...
TextAddressesHigh .byt >$a0000+0*40,>$a0000+1*40,>$a0000+2*40,...

Donc dans ton code, tout ca:
Code:

 ; store hires address in position
 lda #<HIR_ADDR
 sta position
 lda #>HIR_ADDR
 sta position+1

 ; calculate y position (ypos=40*y
 ldy posy
suite5
 clc
 lda position
 adc #40
 bcc suite6
 inc position+1
suite6
 sta position
 
 dey
 bne suite5
se remplace par ca:
Code:

 ldy posy
lda TextAddressesLow  ,y
sta position+0
lda TextAddressesHigh  ,y
sta position+1

et un dernier petit truc:

Si en sortant de ta boucle d'affichage tu sais que la retenue est toujours a 1, plutôt que de faire un CLC avant de faire ton ADC #40, tu peux juste ne pas mettre le CLC et faire un ADC #39 (en commentant évidement que ca part du principe que la retenue doit etre a 1)

Vala.

Ha si, plutôt que le inx/cpx#4/bne tu peux juste afficher a l'envers en faisant juste un dex/bpl







_________________

Dbug
Dbug

Messages : 207
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

mon premier petit programme en 100% assembleur :) Empty Re: mon premier petit programme en 100% assembleur :)

Message par goyo le Dim 3 Mar 2019 - 20:09

Dbug a écrit:Quelques astuces Smile

Si tu utilises XA, tu n'es pas obligé d'inventer des labels "suite1", "suite2", etc... pour toutes les petites routines d'addition, tu peux juste utiliser des blocs locaux.

Donc au lieu de :
Code:
 clc ; for cpx
 lda write+1
 adc #40
 bcc suite3
 inc write+2
suite3
 clc
 sta write+1

 ; increment spr read with 4
 lda read+1
 adc #4
 bcc suite4
 inc read+2
suite4
 sta read+1
tu peux faire ca:

Code:
 
.(
 clc ; for cpx
 lda write+1
 adc #40
 bcc suite
 inc write+2
suite
 clc
 sta write+1
.)

.(
 ; increment spr read with 4
 lda read+1
 adc #4
 bcc suite
 inc read+2
suite
 sta read+1
.)
comme ca tu peux utiliser "suite" de partout, le symbol n'est pas visible a l'extérieur des blocs .( .)

A la place de la multiplication par 40, en général on utilise directement une table qui contient les valeurs 0, 40, 80, ...

Et vu qu'en général, on ajoute l'adresse de départ de l'écran, au final on obtient une table qui contient l'adresse qui va bien déjà calculée:

TextAddressesLow  .byt <$a0000+0*40,<$a0000+1*40,<$a0000+2*40,...
TextAddressesHigh .byt >$a0000+0*40,>$a0000+1*40,>$a0000+2*40,...

Donc dans ton code, tout ca:
Code:

 ; store hires address in position
 lda #<HIR_ADDR
 sta position
 lda #>HIR_ADDR
 sta position+1

 ; calculate y position (ypos=40*y
 ldy posy
suite5
 clc
 lda position
 adc #40
 bcc suite6
 inc position+1
suite6
 sta position
 
 dey
 bne suite5
se remplace par ca:
Code:

 ldy posy
lda TextAddressesLow  ,y
sta position+0
lda TextAddressesHigh  ,y
sta position+1

et un dernier petit truc:

Si en sortant de ta boucle d'affichage tu sais que la retenue est toujours a 1, plutôt que de faire un CLC avant de faire ton ADC #40, tu peux juste ne pas mettre le CLC et faire un ADC #39 (en commentant évidement que ca part du principe que la retenue doit etre a 1)

Vala.

Ha si, plutôt que le inx/cpx#4/bne tu peux juste afficher a l'envers en faisant juste un dex/bpl


Merci beaucoup Dbug pour tes remarques et tes conseils d'expert.

Je n'ai pas bien compris la dernière astuce, je vais mieux l'étudier.
goyo
goyo

Messages : 178
Date d'inscription : 02/05/2014
Age : 48
Localisation : Massy

Revenir en haut Aller en bas

mon premier petit programme en 100% assembleur :) Empty Re: mon premier petit programme en 100% assembleur :)

Message par Dbug le Dim 3 Mar 2019 - 22:16

Je n'ai pas bien compris la dernière astuce, je vais mieux l'étudier.
Bein disons que toutes les instructions mettent a jour le registre d'état DEX n'échappe pas a la règle et met a jour Z si le resultat est nul, et N si il est négatif.

Si tu décrémente (en partant de la fin évidement) et n'a plus besoin du CPX donc tu gagnes quelques cycles, donc ta routine va plus vite.

_________________

Dbug
Dbug

Messages : 207
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

mon premier petit programme en 100% assembleur :) Empty Re: mon premier petit programme en 100% assembleur :)

Message par goyo le Lun 4 Mar 2019 - 11:28

Dbug a écrit:
Je n'ai pas bien compris la dernière astuce, je vais mieux l'étudier.
Bein disons que toutes les instructions mettent a jour le registre d'état DEX n'échappe pas a la règle et met a jour Z si le resultat est nul, et N si il est négatif.

Si tu décrémente (en partant de la fin évidement) et n'a plus besoin du CPX donc tu gagnes quelques cycles, donc ta routine va plus vite.

Merci Dbug, du coup j'ai appris beaucoup en quelques postes !! Smile

me reste plus qu'a programmer mon premier petit jeu en assembleur ! :o
goyo
goyo

Messages : 178
Date d'inscription : 02/05/2014
Age : 48
Localisation : Massy

Revenir en haut Aller en bas

mon premier petit programme en 100% assembleur :) Empty Re: mon premier petit programme en 100% assembleur :)

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum