Derniers sujets
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
Statistiques
Nous avons 240 membres enregistrésL'utilisateur enregistré le plus récent est Jean72
Nos membres ont posté un total de 8915 messages dans 811 sujets
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
4 participants
Forum Oric :: Forums :: Forum Public :: Assembleur
Page 1 sur 1
problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
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
voici mon code en assembleur symbolique qui n'affiche rien ...
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
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
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
Les adresses utilisées sont au delà de $50
_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
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
Par exemple LDX #$A0 et LDX $A0, il y a une subtilité à comprendre qui permet de sortir de la page 0
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
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)
Je pense que tu dois apprendre la différence entre un addressage direct ou immédiat et un adressage relatif
Par exemple LDX #$A0 et LDX $A0, il y a une subtilité à comprendre qui permet de sortir de la page 0
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
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- Messages : 240
Date d'inscription : 25/08/2018
Age : 53
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
L'équivalent du code du bouquin est, si je ne fais pas d'erreur:
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.
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.
- 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
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- Messages : 271
Date d'inscription : 09/02/2014
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
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
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- Messages : 271
Date d'inscription : 09/02/2014
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
Merci didierv, Ladywasky et assinie !
Je comprends mieux , c'est beaucoup plus clair pour moi ! et un cours particulier c'est trop sympa , 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
Je comprends mieux , c'est beaucoup plus clair pour moi ! et un cours particulier c'est trop sympa , 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
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
assinie a écrit:L'équivalent du code du bouquin est, si je ne fais pas d'erreur:Le code que tu as écrit ne fait aboslument pas la même chose.
- 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
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
- Code:
LDA ($OC),Y
C:\osdk\sample\c\hello_world_advanced\print.s(177): 09c8:Syntax error
Break after 1 errors
(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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
C 'est une erreur de frappe, j'ai mis la lettre O à la place du chiffre 0
assinie- Messages : 271
Date d'inscription : 09/02/2014
Re: problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
assinie a écrit:C 'est une erreur de frappe, j'ai mis la lettre O à la place du chiffre 0
Oups pardon c'est de ma faute , j'aurais du vérifier. Merci pour l'info.
0¿O
°
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Sujets similaires
» optimisation scrolling horizontal
» Adresse e-mail en oric.org
» Changement des conditions de Forumactif: perte de notre adresse
» Scrolling en mode HIRES
» remplissage de l'écran Hires
» Adresse e-mail en oric.org
» Changement des conditions de Forumactif: perte de notre adresse
» Scrolling en mode HIRES
» remplissage de l'écran Hires
Forum Oric :: Forums :: Forum Public :: Assembleur
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Mar 5 Mar 2024 - 18:54 par kenneth
» Meurtre à Grande Vitesse
Dim 25 Fév 2024 - 5:09 par Iurius
» ORIC-1 sur LE BON COIN
Ven 23 Fév 2024 - 23:01 par Mcar
» ORIC ATMOS sur LE BON COIN
Dim 4 Fév 2024 - 12:06 par kiwilevrai
» Problème d'affichage des couleurs avec un Oric Atmos
Sam 27 Jan 2024 - 1:26 par pierbail
» Bienvenue dans le Forum des Oriciens
Mar 9 Jan 2024 - 12:33 par Dom50
» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Ven 29 Déc 2023 - 14:13 par Arcade-des-Monts
» Bonnes fêtes
Mar 26 Déc 2023 - 10:21 par Dom50
» Murders in Venice / Meutres à Venise
Sam 18 Nov 2023 - 22:44 par retroric
» Un clavier PS/2 pour tester un ORIC
Dim 27 Aoû 2023 - 9:49 par Voyageur
» Disquette 3" Sedoric
Mar 1 Aoû 2023 - 14:22 par AtomeX
» faire un 6502 avec des phototransistor
Dim 16 Juil 2023 - 17:26 par Voyageur
» Oricutron linux et DSK
Jeu 29 Juin 2023 - 18:34 par Voyageur
» No Problem !
Dim 25 Juin 2023 - 17:53 par Voyageur
» MONASM pour emulateur ORIC
Lun 12 Juin 2023 - 18:31 par Gliou