Amstrad Plus Index du Forum

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

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

overscan et offset

 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation
Sujet précédent :: Sujet suivant  
Auteur Message
Sid


Hors ligne

Inscrit le: 01 Mai 2018
Messages: 47
Masculin
Point(s): 6
Moyenne de points: 0,13

MessagePosté le: Mer 13 Juin - 11:15 (2018)    Sujet du message: overscan et offset Répondre en citant

Suite à une discussion sur le chat hier et les offsets en mode overscan j'ai tenté de régler un problème sur un de mes codes.
Voici le contexte : je tente d'avoir une adresse de départ en #C000 et j'ai tenté de déclarer les offsets dans le CRTC mais apparemment je ne suis pas encore bon.

voici le code (je ne vous insert pas le tableau du gfx pour ne pas pourrir le post Wink).


 
Code:
  org #2000: ent $
 
 largeur equ 33
 hauteur equ 200

 
 ld a,0
 call #bc0e ; set mode 0

;
; Initialisations
;
 
    di        ; On coupe les interruptions
    ld hl,(&38)    ; On lit l'ancienne interruption
    ld (Inter+1),hl    ; et on la sauve.
    ld hl,&c9fb    ; On remplace tout ça par
    ld (&38),hl    ; du neuf (EI,RET)
    ei        ; On remet les interruptions
 
; Formatage de l'écran
 
    ld bc,&bc00+3    ; On met la valeur 8 dans
    out (c),c    ; le registre 3 du CRTC
    ld bc,&bd00+8    ; afin de rester compatible
    out (c),c    ; avec les CRTC type 2
    ld bc,&bc00+2    ; pour lesquels la valeur
    out (c),c    ; 50 est autrement impossible
    ld bc,&bd00+50    ; à mettre dans le registre 2
    out (c),c    ; On met ensuite le registre 1
    ld bc,&bc00+1    ; à la valeur 48 ce qui
    out (c),c    ; nous fait un écran de
    ld bc,&bd00+48    ; 96 octets de large,
    out (c),c    ; un overscan complet quoi !
  ld bc,&bc0c ; registre 12
 out (c),c
 ld a, &30+&0c
 inc b ; passe en bd00
 out (c),a
 ld bc,&bc0d ; registre 13
 ld a,0
 out (c),c
 inc b ; pass en bd00
 out (c),a

setharleypalette ; set color palette
 ld b,26
 ld c,b
 call #bc38 ; set border to black
 ld a,0
 call #bc0e ; set mode 0
 ld hl,harleypalette ; table des couleurs
 ld e,0 ; depart pen 0
loopcol ld b,(hl) ; recupere couleur dans b
 ld c,b ; c=b donc meme couleur
 ld a,e ; on se sert du registre compteur e pour gerer le numero d'encre
 push de:push hl ; on sauvegarde les registres modifie par le vecteur
 call #bc32 ; Appel du vecteur Systeme SCR_SET_INK
 pop hl:pop de ; on restitue ces registres
 inc hl ; prochaine couleur
 inc e ; 1 couleur de moins
 bit 4,e ; teste si 16eme couleur
 jr z,loopcol ; on est arrive



 ld de,#c000 ; adresse de l'ecran
 ld hl,harley ; pointeur sur l'image en memoire
 ld b, hauteur ; hauteur de l'image
 loopharley
 push bc ; sauve le compteur hauteur dans la pile
 push de ; sauvegarde de l'adresse ecran dans la pile
 ld bc, largeur ; largeur de l'image a afficher
 ldir ; remplissage de n * largeur octets a l'adresse dans de
 pop de ; recuperation de l'adresse d'origine
 ex de,hl ; echange des valeurs des adresses
 call bc26 ; calcul de l'adresse de la ligne suivante
 ex de,hl ; echange des valeurs des adresses
 pop bc ; retabli le compteur
 djnz loopharley ; si compteur b n'est pas a zero on boucle
 call waitkey
 Ret
 
 waitkey:
 call #bb06
 ret
 
 bc26
 Ld a,h ; on recupere le contenu de h dans a
 Add a,8 ; on ajoute 8 pour passer à la ligne suivante
 Ld h,a ; on met la nouvelle valeur dans h
 Ret nc ; on arrete ici s'il n'y a pas de depassement
 Ld bc,#c060 ; pour un ecran de 80 caracteres
 Add hl,bc ; s'il y a depassement on additionne #c060 a l'adresse.
 Res 3,h ; pour eviter le depassement de la zone et faire une Raz de l'adresse ecran
 Ret

     di        ; On coupe tout !
Inter    ld hl,0        ; On remet le vieux
    ld (&38),hl    ; modèle et on
    ei        ; remet en marche !
    ret        ; Heu...

 harleypalette
 DB 26,0,13,10
 DB 20,3,23,16
 DB 1,15,6,25
 DB 11,18,4,7
 
 harley:


J'inserts aussi la capture d'écran pour mieux comprendre mon souci.



Revenir en haut
Publicité






MessagePosté le: Mer 13 Juin - 11:15 (2018)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 626
Masculin
Point(s): 15
Moyenne de points: 0,01

MessagePosté le: Mer 13 Juin - 11:43 (2018)    Sujet du message: overscan et offset Répondre en citant

Le problème vient du calcul bc26 qui ne fonctionne que pour la partie en #c000-#FFFF!Or ici, tu mets l’offset en c000-FFFF et 0000-#3FFF.
Deux solutions :
-Créer une routine bc26 qui gère TOUTES les parties de la ram vidéo.
-Utiliser la routine existante et ´filtrer’ afin de rediriger sur la bonne plage adresse.
_________________
Ast/iMP4CT

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


Revenir en haut
snake_plissken


Hors ligne

Inscrit le: 03 Déc 2014
Messages: 341
Localisation: les pont de cé
Masculin Gémeaux (21mai-20juin)
Point(s): 8
Moyenne de points: 0,02

MessagePosté le: Mer 13 Juin - 11:58 (2018)    Sujet du message: overscan et offset Répondre en citant

Pour le BC26 de la partie &0000-&3fff,il faudrait faire un RES 7,H  une fois le calcul du BC26 fait.


&C0->RES 7,H->&00,on met le bit 7 a 0 du coup tu tombes en &00 Smile


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 626
Masculin
Point(s): 15
Moyenne de points: 0,01

MessagePosté le: Mer 13 Juin - 12:14 (2018)    Sujet du message: overscan et offset Répondre en citant

snake_plissken a écrit:
Pour le BC26 de la partie &0000-&3fff,il faudrait faire un RES 7,H  une fois le calcul du BC26 fait.


&C0->RES 7,H->&00,on met le bit 7 a 0 du coup tu tombes en &00 Smile


ou dans ce cas précis utiliser la routine système bc26 en la modifiant qui permet d'affecter toute la ram video!


Code:

; bc26_Fullscreen
;
 ld a,h
 add a,8
 ld h,a
 and #38
 ret nz
 ld a,h
 sub #40
 ld h,a
 ld a,l
 add a,#60 ; 96 chars
 ld l,a
 ret nc
 inc h
 ld a,h
 and 7
 ret nz
 ld a,h
 sub 8
 ld h,a
 ret



Pour information la routine système bc26 se trouve dans la rom basse en #c1e !
Voilà, voilà !
_________________
Ast/iMP4CT

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


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 05:40 (2018)    Sujet du message: overscan et offset

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com