Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» le forum fourre tout
mon premier petit programme en 100% assembleur :) EmptyMar 30 Juin 2020 - 13:11 par Admin

» besoin cable coleur et interface de lecture sd card
mon premier petit programme en 100% assembleur :) EmptyJeu 25 Juin 2020 - 11:56 par kenneth

» I had a dream .. glOric
mon premier petit programme en 100% assembleur :) EmptySam 6 Juin 2020 - 14:18 par jbperin

» Multi soluces...
mon premier petit programme en 100% assembleur :) EmptyMar 19 Mai 2020 - 12:41 par soft-bug

» Des nouvelles de BAS_ORIC
mon premier petit programme en 100% assembleur :) EmptyMer 6 Mai 2020 - 16:08 par goyo

» 3D walkthrough template en moins de 600 lignes de C
mon premier petit programme en 100% assembleur :) EmptyMer 29 Avr 2020 - 20:43 par Star42

» CB2 micro
mon premier petit programme en 100% assembleur :) EmptySam 11 Avr 2020 - 19:29 par jbperin

» Le bonjour de codeur
mon premier petit programme en 100% assembleur :) EmptyMer 1 Avr 2020 - 15:18 par Invité

» [résolu] Format des fichiers Hyperbasic...
mon premier petit programme en 100% assembleur :) EmptySam 28 Mar 2020 - 19:50 par damien

» [résolu] Récupération contenu disquettes 3 pouces...
mon premier petit programme en 100% assembleur :) EmptyVen 27 Mar 2020 - 15:06 par damien

» Echange de jeux/logiciels
mon premier petit programme en 100% assembleur :) EmptyLun 23 Mar 2020 - 20:15 par Star42

» Ordi Portable Sony VAIO
mon premier petit programme en 100% assembleur :) EmptyDim 22 Mar 2020 - 16:17 par froggy

» une atan2 pour vos lib math
mon premier petit programme en 100% assembleur :) EmptyDim 22 Mar 2020 - 11:30 par drpsy

» nouveau site
mon premier petit programme en 100% assembleur :) EmptyJeu 19 Mar 2020 - 20:02 par Star42

» CEO Mag Spéciaux disponibles
mon premier petit programme en 100% assembleur :) EmptyJeu 19 Mar 2020 - 9:33 par musepat

Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 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 208 membres enregistrés
L'utilisateur enregistré le plus récent est darq

Nos membres ont posté un total de 8573 messages dans 746 sujets
Portail ORIC



-54%
Le deal à ne pas rater :
Aspirateur Balai sans fil et sans sac – Bosch Readyy’y (via ODR ...
91.09 € 199.99 €
Voir le deal

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 : 187
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 : 248
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 : 248
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 : 187
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 : 248
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 : 187
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