Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 05 Déc 2023, 06:07

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


BASIC: plot x,y,couleur

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 10 message(s) ] 
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
z80_1327
 Sujet du message : BASIC: plot x,y,couleur
Message Publié : 04 Nov 2023, 21:49 
Hors-ligne

Inscription : 04 Nov 2023, 21:33
Message(s) : 5
Je souhaite connaître le code assembleur de l'instruction BASIC "plot x,y,couleur"

Surtout à cause de la façon dont il répartit les pixels dans le même octet d'écran.

Y a-t-il quelqu'un qui connaît le code ?

Merci.


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 04 Nov 2023, 21:54 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 4959
Salut z80_1327,

Il y a pas mal d'articles sur le site, je te conseille de jeter un oeil sur ces liens :adrt:
https://cpcrulez.fr/coding_menu-RAM.htm
https://cpcrulez.fr/coding_ANTIBUG-01-s ... _ecran.htm
...


Haut
 Profil  
 
velus
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 05 Nov 2023, 12:13 
Hors-ligne
Rulezz
Rulezz

Inscription : 05 Août 2011, 14:38
Message(s) : 178
Ld a,2. ; sélection pen
Call &bbde
Ld de,0000 ; position plot x
Ld hl,398 ; position plot y
Call &bbc0
Ld de,0000 ; position draw x
Ld hl,372. ; position draw y
Call &bbf6
Ret

En basic ça serait
plot 0,398
Draw 0,372,2


Haut
 Profil  
 
z80_1327
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 05 Nov 2023, 22:05 
Hors-ligne

Inscription : 04 Nov 2023, 21:33
Message(s) : 5
Merci pour les contributions.

Maintenant je termine la routine qui ne marche toujours pas...

Quelqu'un ose-t-il découvrir pourquoi ?


Code :
           ; function plot mode 0 > ix = {x,y,col}
     fplot:
           ld      ix,_point
           ld      iy,tbl_col
           ld      de,#C000  ; y = 199
           ;ld      a,(ix+01) ; a = y
           ld      a,(ix+00) ; a = x
           push    af
           sra     a         ; x/2 = byte screen (64 bytes)
           ld      l,a
           xor     a
           ld      h,a
           add     hl,de     ; byte adress screen
           pop     af
           bit     0,a       ; left pixel ?
           jr      nz,fplot_rg
           ld      a,#55     ; yes left
           jp      fplot_lf
  fplot_rg:
           ld      a,#AA     ; right pixel
  fplot_lf:
           ld      (fplot_lr+01),a
           ld      a,(hl)    ; previous byte value
  fplot_lr:
           and     #00       ; mask left or right
           ld      a,(ix+02) ; a = col
           and     #0F       ; tbl_col range 0-15
           ld      (fplot_cl+02),a
  fplot_cl:
           or      (iy+00)   ; 00 = offset tbl_col
           ld      (hl),a    ; plot pixel
           ret

    _point:
           db 0,199,12

   tbl_col:
           db 0,2,8,10,32,34,40,42,128,130,136,138,160,162,168,170


Haut
 Profil  
 
velus
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 06 Nov 2023, 14:44 
Hors-ligne
Rulezz
Rulezz

Inscription : 05 Août 2011, 14:38
Message(s) : 178
Qu'est-ce que tu veux faire ?


Haut
 Profil  
 
z80_1327
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 06 Nov 2023, 20:34 
Hors-ligne

Inscription : 04 Nov 2023, 21:33
Message(s) : 5
La routine ci-dessus tente de peindre un pixel en fonction des données du pointeur "point :"

Routine:

1. Prenez la coordonnée x

2. Calculez à quel octet correspond cette coordonnée, #C000+offset.

3. C'est pair ou impair ?. Pair = masque #55. Impair = #AA.

4. Prenez le valeur qui se trouve dans l'octet calculé et applique le masque déterminé.

5. Prenez la couleur à peindre et recherchez dans la table des couleurs (0-15) la valeur qui lui est attribuée et effectuez une opération OR avec ce qui précède.

6. Le résultat est appliqué et le pixel aura été peint.

Mais comme je l'ai déjà dit, quelque chose ne va pas.

Je vais relire > https://cpcrulez.fr/coding_ANTIBUG-01-s ... _ecran.htm


Haut
 Profil  
 
velus
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 07 Nov 2023, 03:52 
Hors-ligne
Rulezz
Rulezz

Inscription : 05 Août 2011, 14:38
Message(s) : 178
Elle semble bien marcher. Un pixel s'affiche au dessus !


Haut
 Profil  
 
z80_1327
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 08 Nov 2023, 23:01 
Hors-ligne

Inscription : 04 Nov 2023, 21:33
Message(s) : 5
Maintenant et terminé !!!

La routine consomme 96 cycles d'horloge.

peut-être que ça peut être accéléré ...

Code :
     fplot:
           ld      ix,_point  ; point {x,y,cl}
           ld      iy,tbl_cl
           ld      a,(ix+02) ; a = col
           and     #0F       ; tbl_col range 0-15
           sla     a
           ld      (fplot_cl+02),a
           ld      a,(ix+01) ; a = y
           ld      l,a
           xor     a
           ld      h,a
           add     hl,hl
           ld      de,lines  ; adr_scr
           add     hl,de     ; offset + adr_scr = screen
           ld      a,(hl)    ; low byte screen
           ld      e,a
           inc     hl
           ld      a,(hl)    ; high byte screen
           ld      d,a
           ld      a,(ix+00) ; a = x
           push    af
           sra     a
           ld      l,a
           xor     a
           ld      h,a
           add     hl,de     ; byte screen
           pop     af
           bit     0,a       ; left pixel ?
           jr      nz,fplot_rg
           ld      a,#55     ; yes left
           jp      fplot_lf
  fplot_rg:
           ld      a,(fplot_cl+02)
           inc     a
           ld      (fplot_cl+02),a
           ld      a,#AA     ; right pixel
  fplot_lf:
           ld      (fplot_lr+01),a
           ld      a,(hl)    ; previous byte value
  fplot_lr:
           and     #00       ; mask left or right
  fplot_cl:
           or      (iy+00)   ; 00 = offset tbl_col
           ld      (hl),a
           ret

    _point:
           db 0,0,12

   tbl_cl:
           db 0,0,2,1,8,4,10,5,32,16,34,17,40,20,42,21,128,64,130,65,136,68,138,69,160,80,162,81,168,84,170,85
       


Haut
 Profil  
 
z80_1327
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 09 Nov 2023, 19:48 
Hors-ligne

Inscription : 04 Nov 2023, 21:33
Message(s) : 5
Je joins une image de la fonction :)

Code :
                ld      a,12
                ld      (_point+02),a  ; couleur
                ld      b,127
         line_1:
                push    bc
                ld      a,127
                sub     b
                ld      (_point+00),a  ; x
                ld      a,b
                ld      (_point+01),a  ; y
                call    fplot
                pop     bc
                djnz    line_1                         


Vous n’êtes pas autorisé(e) à consulter les fichiers insérés à ce message.


Haut
 Profil  
 
markerror
 Sujet du message : Re: BASIC: plot x,y,couleur
Message Publié : 10 Nov 2023, 21:12 
Hors-ligne
VIP
VIP

Inscription : 04 Sep 2007, 19:43
Message(s) : 725
Bonsoir,

Sans essayer de comprendre ce que fait exactement la routine, il y a quelque chose qui saute aux yeux, tu n'utilises pas les registres B et C. Du coup, on peut soit s'en servir pour dégager le registre IX qui est lent, soit par exemple se servir de ces registres pour stocker une valeur. Un 0 par exemple pour remplacer les séquences

XOR A
LD H,A
en LD H,C

Ca peut aussi servir à virer les séquences
PUSH AF
POP AF

en

LD C,A
LD A,C

Il faut ensuite déterminer quel est le meilleur usage qu'on peut faire de ces deux registres. Un calculateur de NOP aide bien pour ce genre d'optimisation :-).


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 10 message(s) ] 

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.