Derniers sujets
» HRC (Hires RLE Compressed)
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMar 15 Oct 2019 - 20:16 par Hialmar

» CEO-MAG 354
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyDim 13 Oct 2019 - 10:14 par didierv

» Version compatible 64 bits de WAVtoTAP ?
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptySam 12 Oct 2019 - 16:48 par markerror

» Lot de livres et revues Oric sur LBC
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyVen 11 Oct 2019 - 21:37 par didierv

» rs
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMer 9 Oct 2019 - 0:29 par kenneth

» Écriture stylée sur MCP 40
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyDim 6 Oct 2019 - 17:38 par Dbug

» CEO-MAG 353
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyDim 6 Oct 2019 - 15:27 par Symoon

» Vieumikro 2019
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyLun 30 Sep 2019 - 16:34 par Hialmar

» [sujet Public] - le Ceo-Mag
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyDim 29 Sep 2019 - 22:31 par didierv

» Vidéos en anglais
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyDim 29 Sep 2019 - 15:22 par Dbug

» Nouvelles commandes SEDORIC
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptySam 28 Sep 2019 - 20:57 par Sheld67

» A venir: nouvelle version TAP2WAV
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMer 25 Sep 2019 - 21:03 par Symoon

» Twilighte card, 6502 et joysticks
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyMar 24 Sep 2019 - 12:29 par Jede

» Boitier Oric HD
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyLun 23 Sep 2019 - 12:58 par Jede

» OSDK & gnu/Linux...
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling EmptyVen 20 Sep 2019 - 4:39 par Symoon

Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités

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

Nos membres ont posté un total de 7938 messages dans 684 sujets
Portail ORIC




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 : 178
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 : 724
Date d'inscription : 19/01/2014
Age : 56
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 : 213
Date d'inscription : 25/08/2018
Age : 49

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 : 254
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 : 254
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 : 178
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 : 178
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 : 254
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 : 178
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