Derniers sujets
» Oric Atmos et cable Peritel
Hier à 16:06 par Voyageur

» Bienvenue dans le Forum des Oriciens
Mer 17 Oct 2018 - 21:10 par Voyageur

» Carte Twilighte et functionnalités
Mer 17 Oct 2018 - 14:13 par Jede

» OricJoy : un frontend pour oricutron, avec support joystick/gamepad
Mar 16 Oct 2018 - 16:37 par Ladywasky

» CEO MAG 339-340
Mar 16 Oct 2018 - 1:48 par drpsy

» Nippon ni mauvais, Sashipa Oricatoumi.
Lun 15 Oct 2018 - 0:57 par NightBird

» Oric atmos sequence de boot etrange
Sam 13 Oct 2018 - 19:10 par Invité

» Besoin d'aide pour la gestion du temps ...
Sam 13 Oct 2018 - 12:08 par Ladywasky

» Faire mumuse avec la musique
Ven 12 Oct 2018 - 15:22 par Ladywasky

» Oric Kong en C version finale
Jeu 11 Oct 2018 - 22:53 par Ladywasky

» problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
Jeu 11 Oct 2018 - 22:27 par goyo

» Orix : Thread de notification sur le développement
Jeu 11 Oct 2018 - 21:38 par Jede

» Oric Phœnix à Vieumikro
Jeu 11 Oct 2018 - 9:54 par Oric1-Atmos

» Atmos à vendre
Jeu 11 Oct 2018 - 3:07 par kenneth

» TV 'tube' 55cm
Mer 10 Oct 2018 - 22:52 par Symoon

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

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

Nos membres ont posté un total de 7329 messages dans 548 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

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
avatar
goyo

Messages : 83
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

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
avatar
didierv

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

http://www.dmacoco.fr

Revenir en haut Aller en bas

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)
avatar
Ladywasky

Messages : 87
Date d'inscription : 25/08/2018

Revenir en haut Aller en bas

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)
avatar
assinie

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

Revenir en haut Aller en bas

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
avatar
assinie

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

Revenir en haut Aller en bas

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
avatar
goyo

Messages : 83
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

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
avatar
goyo

Messages : 83
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

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
avatar
assinie

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

Revenir en haut Aller en bas

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
  °
avatar
goyo

Messages : 83
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

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