Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» besoin cable coleur et interface de lecture sd card
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptySam 18 Juil 2020 - 16:29 par kenneth

» le forum fourre tout
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMar 30 Juin 2020 - 13:11 par Admin

» I had a dream .. glOric
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptySam 6 Juin 2020 - 14:18 par jbperin

» Multi soluces...
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMar 19 Mai 2020 - 12:41 par soft-bug

» Des nouvelles de BAS_ORIC
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMer 6 Mai 2020 - 16:08 par goyo

» 3D walkthrough template en moins de 600 lignes de C
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMer 29 Avr 2020 - 20:43 par Star42

» CB2 micro
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptySam 11 Avr 2020 - 19:29 par jbperin

» Le bonjour de codeur
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMer 1 Avr 2020 - 15:18 par Invité

» [résolu] Format des fichiers Hyperbasic...
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptySam 28 Mar 2020 - 19:50 par damien

» [résolu] Récupération contenu disquettes 3 pouces...
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyVen 27 Mar 2020 - 15:06 par damien

» Echange de jeux/logiciels
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyLun 23 Mar 2020 - 20:15 par Star42

» Ordi Portable Sony VAIO
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyDim 22 Mar 2020 - 16:17 par froggy

» une atan2 pour vos lib math
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyDim 22 Mar 2020 - 11:30 par drpsy

» nouveau site
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyJeu 19 Mar 2020 - 20:02 par Star42

» CEO Mag Spéciaux disponibles
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyJeu 19 Mar 2020 - 9:33 par musepat

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

Nos membres ont posté un total de 8575 messages dans 746 sujets
Portail ORIC



Le Deal du moment : -83%
Hub USB LAB.C – Chargeur USB universel 5 portes
Voir le deal
4.99 €

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par goyo le Mer 10 Oct 2018 - 12:28

Je me m'initie à l'assembleur à travers le C osdk. J'ai pas bien tout compris le système d'affichage de la boucle de scrolling du code ci-dessous.

J'aimerais pouvoir obtenir la version Assembleur symbolique , relogeable de cette routine. J'ai fait une tentative dans le code plus bas mais sans succès.

je ne comprend pas comment ça fait pour agir sur la mémoire de l'écran étant donné que les adresses 0C et 0D ne sont pas celles de l'écran mais des adresses de la page zéro :-/
de pus je sais pas si les adresses 0C et 0D sont elles déjà réservées par le compilateur C  ou par osdk ?

code du bouquin "L'assembleur de l'ORIC 1 et ORIC-ATMOS" Edition PSI, page 76
Code:
LDA 82
STA (0C)
LDA BB
STA (0D)
LDX 27d
CLC
LDA (0C)
ADC 40d
STA (0C)
BCC 2+2
INC (0D)
LDY 37d
LDA (0C),Y
PHA
DEY
LDA (OC),Y
INY
STA (0C),Y
DEY
DEY
BPL 2-9
INY
PLA
STA (0C),Y
DEX
BNE 2-33
RTS

voici mon code en assembleur symbolique qui n'affiche rien ...
Code:

;scroll de droite à gauche
_scrollleft

LDA $82
STA $0C
LDA $BB
STA $0D
LDX 27
suite3
CLC
LDA $0C
ADC 40
STA $0C
BCC suite1
INC $0D
suite1
LDY 37
LDA $0C,Y
PHA
DEY
suite2
LDA $0C,Y
DEY
STA $0C,Y
DEY
DEY
BPL suite2
INY
PLA
STA $0C,Y
DEX
BNE suite3
RTS
merci de votre aide ! Very Happy
goyo
goyo

Messages : 188
Date d'inscription : 02/05/2014
Age : 48
Localisation : Massy

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par didierv le Mer 10 Oct 2018 - 18:24

Pour les adresses prises en C par OSDK, voir http://osdk.defence-force.org/index.php?page=documentation&subpage=zeropage

Les adresses utilisées sont au delà de $50

_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
didierv
didierv

Messages : 806
Date d'inscription : 19/01/2014
Age : 57
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par Ladywasky le Mer 10 Oct 2018 - 19:01

Je ne suis pas beaucoup plus douée que toi en assembleur.

Je pense que tu dois apprendre la différence entre un addressage direct ou immédiat et un adressage relatif Smile

Par exemple LDX #$A0 et LDX $A0, il y a une subtilité à comprendre qui permet de sortir de la page 0 Wink

Si ça peut te rassurrer, j'ai compris ça il y a deux jours en allant voir comment faire des effets sonores sur ATMOS.
Le premier code à comprendre se trouve dans Théoric n°7 page 39 (qui utilise la page 0)
et le second à comparer page dans Theoric HS pages 37 et 38 ainsi que Théoric n°4 page 56. C'est très court et très très instructif !!!
6 instructions assembleurs, c'est facile à étudier Very Happy

Et le résultat se trouve ici :
http://forum.defence-force.org/viewtopic.php?f=24&p=18242&sid=349c5074082bfc333ccbf1599a7f4d69#p18242

Et mis en pratique dans mon Oric Kong :
https://github.com/DJChloe/Orickong_C/blob/master/src/Main/main.cLà-dedans (cherche bien) et ici.

Tu vas voir, ce n'est pas si compliqué.
N'oublie pas d'avoir ton manuel Atmos sous le coude pour certaines mnémoniques (il y en à 3 ou 4 qui se battent en duel)
Ladywasky
Ladywasky

Messages : 240
Date d'inscription : 25/08/2018
Age : 50

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par assinie le Mer 10 Oct 2018 - 19:47

L'équivalent du code du bouquin est, si je ne fais pas d'erreur:

Code:

    LDA #$82
    STA $0C
    LDA #$BB
    STA $0D

    LDX #27
suite3
    CLC
    LDA $0C
    ADC #40
    STA $0C
    BCC suite1
    INC $0D

suite1
    LDY #37
    LDA ($0C),Y
    PHA
    DEY

suite2
    LDA ($OC),Y
    INY
    STA ($0C),Y
    DEY
    DEY
    BPL suite2

    INY
    PLA
    STA ($0C),Y
    DEX
    BNE suite3
    RTS
Le code que tu as écrit ne fait aboslument pas la même chose.

Les 4 premières instructions placent la valeur $BB82 dans les "cases" mémoire $0C et $0D, ce qui correspond à l'adresse du 3ième caractère de la 1ère ligne de l'écran (si tu fais POKE #BB82,65 en BASIC, tu devrais voir un "A" à cet emplacement)

Pour comprendre le fonctionnement du programme, il faut décomposer les instructions LDA et STA.

  • Le $ indique une valeur en hexadécimal

  • Le # indique que l'argument de l'insrtuction est pris tel quel (immédiatement). Par exemple, LDX #27 charge la valeur décimale 27 dans le registre X.

  • Les parenthèses indiquent un adressage indirect, ce qui signifie que l'argument de l'instruction n'est pas à l'adresse indiquée mais à l'adresse contenue dans l'adresse indiquée...

    Par exemple:
    Si $0C contient $82, $0D contient $BB, et $BB82 contient $41, alors LDA ($0C) est équivalent à LDA $BB82 qui sera équivalent dans ce cas à LDA #$41

  • Le ,Y signifie que le registre Y sert d'index pour avoir l'adresse finale qui sera utilisée par l'instruction (ie on ajoute la valeur de Y à l'adresse en argument juste avant le ,Y)

    Par exemple:
    Si Y contient la valeur décimale 37, ou $25 en hexa, et $BBA7 contient la valeur $42, alors l'instruction LDA $BB82,Y est équivalent à LDA $BB82+$25 soit LDA $BBA7 et finalement A est chargé avec la valeur $42.


Maintenant, si on prend l'instruction LDA ($0C),Y et qu'on applique les règles ci-dessus, on a:
LDA ($0C),Y -> LDA $BB82,Y -> LDA $BBA7 -> LDA #$42

Le raisonnement est le même pour les instructions STA pour transférer le contenu du registre A vers une case mémoire.


Dernière édition par assinie le Mer 10 Oct 2018 - 19:57, édité 3 fois (Raison : Correction typo)
assinie
assinie

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

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par assinie le Mer 10 Oct 2018 - 20:01

Petite précision, si l'argument de l'instruction ne commence pas par un #, alors l'arguement représente une adresse mémoire (adressage absolu):

LDA #$25 charge l'accumulateur avec la valeur immédiate $25
LDA $25 charge l'accumulateur avec la valeur contenue à l'adresse absolue $25
assinie
assinie

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

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par goyo le Jeu 11 Oct 2018 - 16:06

Merci didierv, Ladywasky et assinie !

Je comprends mieux , c'est beaucoup plus clair pour moi  ! et un cours particulier c'est trop sympa Smile , surtout par des passionnés !

Je n'avais touché à l'assembleur de l'Oric depuis 30 ans ... J'avais fait une petite routine d'affichage de bloc en mode Hires : pour le prototype d'un jeu sur le thème Alien

Je crois que je ne vous poserai plus de questions lorsque j'aurai atteint le niveau d'assembleur du Professeur Chéma, je ne sais pas si ce sera ici bas ou dans la cieux Wink
goyo
goyo

Messages : 188
Date d'inscription : 02/05/2014
Age : 48
Localisation : Massy

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par goyo le Jeu 11 Oct 2018 - 16:26

assinie a écrit:L'équivalent du code du bouquin est, si je ne fais pas d'erreur:

Code:

    LDA #$82
    STA $0C
    LDA #$BB
    STA $0D

    LDX #27
suite3
    CLC
    LDA $0C
    ADC #40
    STA $0C
    BCC suite1
    INC $0D

suite1
    LDY #37
    LDA ($0C),Y
    PHA
    DEY

suite2
    LDA ($OC),Y
    INY
    STA ($0C),Y
    DEY
    DEY
    BPL suite2

    INY
    PLA
    STA ($0C),Y
    DEX
    BNE suite3
    RTS
Le code que tu as écrit ne fait aboslument pas la même chose.

Les 4 premières instructions placent la valeur $BB82 dans les "cases" mémoire $0C et $0D, ce qui correspond à l'adresse du 3ième caractère de la 1ère ligne de l'écran (si tu fais POKE #BB82,65 en BASIC, tu devrais voir un "A" à cet emplacement)

Pour comprendre le fonctionnement du programme, il faut décomposer les instructions LDA et STA.

  • Le $ indique une valeur en hexadécimal

  • Le # indique que l'argument de l'insrtuction est pris tel quel (immédiatement). Par exemple, LDX #27 charge la valeur décimale 27 dans le registre X.

  • Les parenthèses indiquent un adressage indirect, ce qui signifie que l'argument de l'instruction n'est pas à l'adresse indiquée mais à l'adresse contenue dans l'adresse indiquée...

    Par exemple:
    Si $0C contient $82, $0D contient $BB, et $BB82 contient $41, alors LDA ($0C) est équivalent à LDA $BB82 qui sera équivalent dans ce cas à LDA #$41

  • Le ,Y signifie que le registre Y sert d'index pour avoir l'adresse finale qui sera utilisée par l'instruction (ie on ajoute la valeur de Y à l'adresse en argument juste avant le ,Y)

    Par exemple:
    Si Y contient la valeur décimale 37, ou $25 en hexa, et $BBA7 contient la valeur $42, alors l'instruction LDA $BB82,Y est équivalent à LDA $BB82+$25 soit LDA $BBA7 et finalement A est chargé avec la valeur $42.


Maintenant, si on prend l'instruction LDA ($0C),Y et qu'on applique les règles ci-dessus, on a:
LDA ($0C),Y -> LDA $BB82,Y -> LDA $BBA7 -> LDA #$42

Le raisonnement est le même pour les instructions STA pour transférer le contenu du registre A vers une case mémoire.

oups j'ai une erreur à la compilation  : Assembling    Rolling Eyes

Code:
  LDA ($OC),Y
C:\osdk\sample\c\hello_world_advanced\print.s(177):  09c8:Syntax error
Break after 1 errors
apparemment il ne veut pas des parenthèses du LDA ..?
(j'ai mis la routine dans le source print.s)

;scroll de droite à gauche

_scrollleft
LDA #$82
STA $0C
LDA #$BB
STA $0D

LDX #27
suite3
CLC
LDA $0C
ADC #40
STA $0C
BCC suite1
INC $0D

suite1
LDY #37
LDA ($0C),Y
PHA
DEY

suite2
LDA ($OC),Y
INY
STA ($0C),Y
DEY
DEY
BPL suite2

INY
PLA
STA ($0C),Y
DEX
BNE suite3
RTS
goyo
goyo

Messages : 188
Date d'inscription : 02/05/2014
Age : 48
Localisation : Massy

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par assinie le Jeu 11 Oct 2018 - 17:26

C 'est une erreur de frappe, j'ai mis la lettre O à la place du chiffre 0 Embarassed
assinie
assinie

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

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

Message par goyo le Jeu 11 Oct 2018 - 22:27

assinie a écrit:C 'est une erreur de frappe, j'ai mis la lettre O à la place du chiffre 0 Embarassed

Oups pardon c'est de ma faute , j'aurais du vérifier. Merci pour l'info.

0¿O
  °
goyo
goyo

Messages : 188
Date d'inscription : 02/05/2014
Age : 48
Localisation : Massy

Revenir en haut Aller en bas

problème d'affichage écriture dans adresse mémoire écran, routine de scrolling Empty Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling

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