Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» rs
copie d'écran text EmptyDim 31 Mar 2024 - 14:35 par kenneth

» Bla Bla général du Jury
copie d'écran text EmptyJeu 21 Mar 2024 - 8:51 par Dom50

» carte mère Oric (re)tracée
copie d'écran text EmptyMar 5 Mar 2024 - 18:54 par kenneth

» Meurtre à Grande Vitesse
copie d'écran text EmptyDim 25 Fév 2024 - 5:09 par Iurius

» ORIC-1 sur LE BON COIN
copie d'écran text EmptyVen 23 Fév 2024 - 23:01 par Mcar

» ORIC ATMOS sur LE BON COIN
copie d'écran text EmptyDim 4 Fév 2024 - 12:06 par kiwilevrai

» Problème d'affichage des couleurs avec un Oric Atmos
copie d'écran text EmptySam 27 Jan 2024 - 1:26 par pierbail

» Bienvenue dans le Forum des Oriciens
copie d'écran text EmptyMar 9 Jan 2024 - 12:33 par Dom50

» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
copie d'écran text EmptyVen 29 Déc 2023 - 14:13 par Arcade-des-Monts

» Bonnes fêtes
copie d'écran text EmptyMar 26 Déc 2023 - 10:21 par Dom50

» Murders in Venice / Meutres à Venise
copie d'écran text EmptySam 18 Nov 2023 - 22:44 par retroric

» Un clavier PS/2 pour tester un ORIC
copie d'écran text EmptyDim 27 Aoû 2023 - 9:49 par Voyageur

» Disquette 3" Sedoric
copie d'écran text EmptyMar 1 Aoû 2023 - 14:22 par AtomeX

» faire un 6502 avec des phototransistor
copie d'écran text EmptyDim 16 Juil 2023 - 17:26 par Voyageur

» Oricutron linux et DSK
copie d'écran text EmptyJeu 29 Juin 2023 - 18:34 par Voyageur

Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

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 243 membres enregistrés
L'utilisateur enregistré le plus récent est paul225l

Nos membres ont posté un total de 8922 messages dans 811 sujets
Sites Sympas

> Culture Club


-39%
Le deal à ne pas rater :
Pack Home Cinéma Magnat Monitor : Ampli DENON AVR-X2800H, Enceinte ...
1190 € 1950 €
Voir le deal

copie d'écran text

2 participants

Aller en bas

copie d'écran text Empty copie d'écran text

Message par goyo Mar 2 Avr 2019 - 13:57

Je fais une copie d'écran d'une zone mémoire non visible (0x93C7) vers la zone visible (0xBB80+40).

je ne comprends pas pourquoi avec cet algo tout l'écran n'est pas recopié ?  il manque 39 caractères dans la dernière ligne visible.

pourtant je copie bien 5 x bloc de 208 bytes = 1040, soit 26*40, taille de l'écran TEXT (- 1ere ligne)

Code:

                                    CAPS
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
CB------------- screen from 0x93C7-----A
C                                                          <- manque le reste de la ligne ici?                              

le code :
Code:


#include <lib.h>
int i,j,x,y,xx,yy;
unsigned char c;

void AdvancedPrint(char x_pos,char y_pos,const char *ptr_message);
 
fasttextcopy()
{
 asm("lda #$A7;" // A8 - A7 target address low -1  
 "sta write_+1;"
 "lda #$BB;"
 "sta write_+2;"
 "lda #$C6;" // C7 - C6 source address low -1
 "sta read_+1;"
 "lda #$93;"
 "sta read_+2;"
 
    "ldy #5;"  // for 5 x 208 bytes = 1040
 
 "suite1:"
 "ldx #209;"
 "clc;"
 "suite2:"
 "read_:"
 "lda $1234,x;"
 "write_:"
 "sta $1234,x;"
 "dex;"
 "bne suite2;"
 
    // retenue addition #208 pour read
 "lda read_+1;"
 "adc #208;"
 "bcc saut_retenue1;"
 "inc read_+2;"
 "saut_retenue1:"
 "sta read_+1;"
    
 // retenue addition #208 pour write
 "clc;"
 "lda write_+1;"
 "adc #208;"
 "bcc saut_retenue2;"
 "inc write_+2;"
 "saut_retenue2:"
 "sta write_+1;"
 "clc;"
 "dey;"
 "bne suite1;"
 "");
}


void main()
{
 
 
 
 c=32;
 for (j=0;j<100;j++)
 {
 //test cadre
 for (xx=0;xx<40;xx++)
 poke(0x93C7+xx,65);
 
 poke(0x93C7,18);
 
 
 
 for (yy=0;yy<26;yy++)
 {
 poke(0x93C7+(yy*40),65);
 poke(0x93C7+(yy*40)+39,65);
 
 }
 for (yy=1;yy<27;yy++)
 {
 poke(0x93C7+(yy*40)+1,66);
 poke(0x93C7+(yy*40),67);
 AdvancedPrint(2,yy,"------------- screen from 0x93C7-----");
 }
 
 for (xx=0;xx<40;xx++)
 poke(0x93C7+(27*40)+xx,66);
 /*
 for (i=0;i<1040;i++)
 {
 if (c>32&&c<128)
 poke(0x93C7+i,c);
 else
 poke(0x93C7+i,32);
 c++;
 }
 */
 
 gotoxy(0,0);printf("nbr=%d",j);
 
 fasttextcopy();
 }
}
goyo
goyo

Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy

Revenir en haut Aller en bas

copie d'écran text Empty Re: copie d'écran text

Message par assinie Mer 3 Avr 2019 - 12:43

L'écran texte fait 28 lignes de 40 caractères et va de #BB80 à #BFDF, soit 1120 caractères au total.
Si on enlève la première ligne, il reste 1080 caractères et non 1040.

Il faudrait donc que tu modifies la valeur d'initialisation de X par 1080 / 5 +1 = 217, ainsi que les additions pour ajouter 216 au lieu de 208.

Pour le code assembleur, j'aurai plutôt fait une première boucle pour copier 4 blocs de 256 octets , soit 1024 octets, suivi d'une seconde pour les 56 octets restants.

L'avantage de copier des blocs de 256 octets et que pour passer d'un bloc à l'autre, il suffit d'incrémenter le poids fort des adresses stockées en read+1 et write+1 ce qui évite l'addition de 208, au 216, avec gestion de la retenue éventuelle.
Un autre avantage est que l'initialisation de X n'a pas besoin d'être faite à chaque itération de la première boucle mais unquement juste avant la première exécution (LDX #$00  avec incrémentation de X dans la boucle).
Ce qui permet un code plus concis et peut-être un peu plus rapide.
assinie
assinie

Messages : 271
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

copie d'écran text Empty Re: copie d'écran text

Message par goyo Mer 3 Avr 2019 - 14:06

assinie a écrit:L'écran texte fait 28 lignes de 40 caractères et va de #BB80 à #BFDF, soit 1120 caractères au total.
Si on enlève la première ligne, il reste 1080 caractères et non 1040.

Il faudrait donc que tu modifies la valeur d'initialisation de X par 1080 / 5 +1 = 217, ainsi que les additions pour ajouter 216 au lieu de 208.

Pour le code assembleur, j'aurai plutôt fait une première boucle pour copier 4 blocs de 256 octets , soit 1024 octets, suivi d'une seconde pour les 56 octets restants.

L'avantage de copier des blocs de 256 octets et que pour passer d'un bloc à l'autre, il suffit d'incrémenter le poids fort des adresses stockées en read+1 et write+1 ce qui évite l'addition de 208, au 216, avec gestion de la retenue éventuelle.
Un autre avantage est que l'initialisation de X n'a pas besoin d'être faite à chaque itération de la première boucle mais unquement juste avant la première exécution (LDX #$00  avec incrémentation de X dans la boucle).
Ce qui permet un code plus concis et peut-être un peu plus rapide.

Merci assinie de tes remarques, je vais pouvoir optimiser mon code.

Quant au nombre de ligne, si je ne me trompe pas, je vois qu'il est de 27 (ligne du CAPS comprise) et donc de 26 lignes PLOTables.
goyo
goyo

Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy

Revenir en haut Aller en bas

copie d'écran text Empty Re: copie d'écran text

Message par assinie Mer 3 Avr 2019 - 17:02

La mémoire écran pour en mode TEXT s'étend de #BB80 à #BFDF soit #BFDF-#BB80+1 = 1120 octets et 1120 / 40 = 28.
Il y a bien 28 lignes au total.

La commande PLOT prend une valeur entre 0 et 26 pour le numéro de ligne ce qui fait bien 27 lignes, mais la ligne 0 correspond en fait à la deuxième ligne de l'écran (celle sous la ligne contenant CAPS).

Tu peux le vérifier en faisant:
Code:
PLOT 2,0,"LIGNE 0"
PLOT 2,26,"LIGNE 26"
assinie
assinie

Messages : 271
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

copie d'écran text Empty Re: copie d'écran text

Message par goyo Mer 3 Avr 2019 - 17:44

assinie a écrit:La mémoire écran pour en mode TEXT s'étend de #BB80 à #BFDF soit #BFDF-#BB80+1 = 1120 octets et 1120 / 40 = 28.
Il y a bien 28 lignes au total.

La commande PLOT prend une valeur entre 0 et 26 pour le numéro de ligne ce qui fait bien 27 lignes, mais la ligne 0 correspond en fait à la deuxième ligne de l'écran (celle sous la ligne contenant CAPS).

Tu peux le vérifier en faisant:
Code:
PLOT 2,0,"LIGNE 0"
PLOT 2,26,"LIGNE 26"

Ha oui pardon ! j'ai zappé la ligne 0 qui compte bien comme une ligne... :-o

du coup ça résout mon problème!

Merci assinie de ta réponse Smile
goyo
goyo

Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy

Revenir en haut Aller en bas

copie d'écran text Empty Re: copie d'écran text

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