CPC Rulez https://cpcrulez.fr/forum/ |
|
BASIC: plot x,y,couleur https://cpcrulez.fr/forum/viewtopic.php?f=4&t=6923 |
Page 1 sur 1 |
Auteur : | z80_1327 [ 04 Nov 2023, 21:49 ] |
Sujet du message : | BASIC: plot x,y,couleur |
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. |
Auteur : | hERMOL [ 04 Nov 2023, 21:54 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
Salut z80_1327, Il y a pas mal d'articles sur le site, je te conseille de jeter un oeil sur ces liens https://cpcrulez.fr/coding_menu-RAM.htm https://cpcrulez.fr/coding_ANTIBUG-01-s ... _ecran.htm ... |
Auteur : | velus [ 05 Nov 2023, 12:13 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
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 |
Auteur : | z80_1327 [ 05 Nov 2023, 22:05 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
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 |
Auteur : | velus [ 06 Nov 2023, 14:44 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
Qu'est-ce que tu veux faire ? |
Auteur : | z80_1327 [ 06 Nov 2023, 20:34 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
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 |
Auteur : | velus [ 07 Nov 2023, 03:52 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
Elle semble bien marcher. Un pixel s'affiche au dessus ! |
Auteur : | z80_1327 [ 08 Nov 2023, 23:01 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
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 |
Auteur : | z80_1327 [ 09 Nov 2023, 19:48 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
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 |
Auteur : | markerror [ 10 Nov 2023, 21:12 ] |
Sujet du message : | Re: BASIC: plot x,y,couleur |
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 . |
Page 1 sur 1 | Le fuseau horaire est UTC+1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |