Amstrad Plus Forum Index

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

*****Vecteur bc26

 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Affichage video
Previous topic :: Next topic  
Author Message
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Thu 6 Aug - 14:21 (2015)    Post subject: *****Vecteur bc26 Reply with quote

Tout le monde, ou presque, connait ce vecteur, voire son utilisation.  Il est utilisé pour calculer l'adresse de la prochaine ligne, dans l'utilisation de l'affichage de sprites, de window...
Voilà donc une interprétation rapide de la routine.


Code:
; mon bc26 / routine pour une adresse ecran comprise entre #c000 et #ffff
; in : hl=adresse ecran
; out : hl=nouvelle adresse
;
mybc26
             Ld a,h ; on récupère le contenu de h dans a
             Add a,8 ; on ajoute 8 pour passer à la ligne suivante
             Ld h,a ; on mets la nouvelle valeur dans h
             Ret nc ; on arrete ici s'il n'y a pas de depassement
             Ld bc,#c050 ; pour un ecran de 80 caractères
             Add hl,bc ; s'il y a dépassement on additionne #c050 à l'adresse.
             Ret











Dans le cas d'optisation extrême, on peut aussi utiliser les instructions set et res, qui permettent comme vous le savez de mettre un bit à 1 (set x,h) ou à 0 (res x,a), x étant ici le numéro de bit (0 à 7)


Je serais curieux de connaitre aussi votre vision du bc26, alors n'hésitez pas à compléter cet article.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Publicité






PostPosted: Thu 6 Aug - 14:21 (2015)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
snake_plissken


Offline

Joined: 03 Dec 2014
Posts: 358
Localisation: les pont de cé
Masculin Gémeaux (21mai-20juin)
Point(s): 26
Moyenne de points: 0.07

PostPosted: Tue 26 Jul - 09:44 (2016)    Post subject: *****Vecteur bc26 Reply with quote

Et le vecteur qui fait l'inverse,c'est lequel déja ? BC27 ?

Tiens quelle routine proposerais tu pour ce cas ?


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Tue 26 Jul - 10:48 (2016)    Post subject: *****Vecteur bc26 Reply with quote

Bc29, of course...
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
snake_plissken


Offline

Joined: 03 Dec 2014
Posts: 358
Localisation: les pont de cé
Masculin Gémeaux (21mai-20juin)
Point(s): 26
Moyenne de points: 0.07

PostPosted: Tue 26 Jul - 11:07 (2016)    Post subject: *****Vecteur bc26 Reply with quote

J'étais pas loin  Mort de Rire .

Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Tue 26 Jul - 11:19 (2016)    Post subject: *****Vecteur bc26 Reply with quote

Une petite mise à jour s'imposant, j'ai décidé de vous faire partager ma dernière routine BC26. Cela pourrait être utile pour certains d'entre vous, non ?

Code:
; mon bc26 / routine pour une adresse ecran comprise entre #c000 et #ffff
; in : hl=adresse ecran
; out : hl=nouvelle adresse
;
mybc26
             Ld a,h ; on récupère le contenu de h dans a
             Add a,8 ; on ajoute 8 pour passer à la ligne suivante
             Ld h,a ; on mets la nouvelle valeur dans h
             Ret nc ; on arrete ici s'il n'y a pas de depassement
             Ld bc,#c050 ; pour un ecran de 80 caractères
             Add hl,bc ; s'il y a dépassement on additionne #c050 à l'adresse.
             Res 3,h    ; pour eviter le dépassement de la zone et faire une Raz de l'adresse ecran
             Ret






Pas trop compliqué ?

_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
snake_plissken


Offline

Joined: 03 Dec 2014
Posts: 358
Localisation: les pont de cé
Masculin Gémeaux (21mai-20juin)
Point(s): 26
Moyenne de points: 0.07

PostPosted: Fri 29 Dec - 17:53 (2017)    Post subject: *****Vecteur bc26 Reply with quote

Et pour un écran situé en &8000-&BFFF ? Mort de Rire .
Personnellement je calculerais pour un écran &c000-&ffff et après je soustrais pour retomber en &8000


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Sat 30 Dec - 00:13 (2017)    Post subject: *****Vecteur bc26 Reply with quote

snake_plissken wrote:
Et pour un écran situé en &8000-&BFFF ? Mort de Rire .
Personnellement je calculerais pour un écran &c000-&ffff et après je soustrais pour retomber en &8000



Y'a rien à soustraire ! Comme je te l'ai expliqué ici, un simple Res suffit !
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
gurneyh


Offline

Joined: 18 Dec 2018
Posts: 13
Masculin
Point(s): 13
Moyenne de points: 1.00

PostPosted: Thu 7 May - 18:42 (2020)    Post subject: *****Vecteur bc26 Reply with quote

Salut 


Désolé de remonter un vieux sujet, mais il me semble que ce qui suit peut être intéressant.


La routine présentée par Ast, peut fonctionner indépendamment de l'adresse de base de l'écran, moyennant l'ajout d'un res en fin de routine.
Dans le cadre, d'un double buffering sans l'astuce consistant à utiliser la configuration mémoire #c3, et ainsi toujours travailler en #c000, c'est un peut génant de devoir avoir 2 routines, ou de faire du code automodifié, j'ai trouvé cette version


bc26_hl
    ld a, h
    add a, 8
    ld h, a
    and #38
    ret nz
    ld a, R1 * 2
    add l
    ld a, #c0 ; -#40
    adc a, h
    ld h, a
    ret


Le and #38, permet juster de checker si on se trouve sur la premier ligne d'un caractère
and #38 = 0 => première ligne de caractère, on doit corriger
and #38 <> 0 ras 


Cette routine doit fonctionner dans la majorité des cas. Cependant et au contraire de la routine BC26 présente en rom, et souvent vue dans la rubrique rubidouilles d'ACPC, cette routine et les routines plus haut ne fonctionnent pas.


Un exemple, je me trouve à l'adresse écran #ffd4 par exemple, soit la 7ème ligne d'un caractère, on se trouve dans le cas ou l'ajout de R1 * 2, pour passer à la ligne de caractère suivante, va provoquer un dépassement du bloc courant.
La solution que j'ai trouvé est la suivante.


bc26_hl
    ld a, h
    add a, 8
    ld h, a
    and #38
    ret nz
    ld a, R1 * 2
    add l
    ld a, #c0 ; -#40
    adc a, h
    ld h, a
    res 3, h    ; bouclage sur le bloc courant
    ret




Avec cette dernière version il me semble qu'on a un bc26 tout terrain.
En espérant ne pas raconter de bêtises, et ne pas enfoncer des portes ouvertes.


edit: Je n'arrive pas à mettre le code en forme Sad
Et j'ai zappé que Ast parlait déjà du res 3, h, bon il reste le and #38 







Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Affichage video All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group