Logicielsmoto.com

Nous sommes le 28 Mar 2024, 09:42

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 281 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6 ... 19  Suivante
Auteur Message
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 01:20 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Attention, un BEQ/BNE et les autres branchements ne sont pas des GOSUBs, mais des GOTOs (on n'en revient pas!) Les seul équivalents à GOSUB sont BSR, LBSR et JSR, mais ils ne sont pas conditionnels. Par contre en mélangeant astucieusement les deux on peut avoir le fonctionnement que tu recherches probablement. Cependant je ne comprends pas trop le besoin ici.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 02:14 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
bon! table raz ! tout est ok dans mon code, juste !

il me faudrait une routine/code à appeler, qui swap +$2000 puis -$2000 à X, le premier sera toujours +$2000

process :

LEAX (-40*45),X ; X déja défini ici peut importe cette valeur à ce stade (avant d'appeler la routine.)

appel de la routine 1er fois : current value+$2000
...
...
appel de la routine 2eme fois : current value-$2000
...
...
appel de la routine 3er fois : current value+$2000
etc...

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 02:40 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
hoooooo !

c'est bon ! ho quel effort de ouf !

j'ai trouvé

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 04:01 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
oh! bon j'ai des bugs d'affichages mais je pense avoir compris,

en faite quant je commence à tracer chaque sprite, je sais pas en fonction de COORD, si c'est un espace colonne paire ou impaire !
virtuellement ramA ou ramB !!

et en fonction de la largeur (et position paire impaire !) du 1er sprite puis les suivants, le swap ramA, ramB (ou +$2000 et -$2000),
bah je sais pas où ça en ai, donc ça cafouille !

parce que dès fois faut commencer par +$2000, puis dès fois par -$2000 !!

mais sinon tout est sur la table. !

je vais potasser encore ...

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 16:16 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
zut je cafouille là

en faite je veux faire ça:

LDB #$22
STB $2000

je veux mettre la valeur de X à la place de $2000

pour que ça mettent la valeur $22 --> adresse memoire X (X étant $2000 qui varie en faite)

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 17:00 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
ok c'est bon

Code:
        LDA #100       ; position x
        LDB #100        ; position y
        JSR COORD2    ; retourne l'adresse memoire de la position dans X
        LDB #$22        ; selection des couleurs des 2 pixels à afficher
        STB   ,X            ; affiche $22 dans l'adresse memoire X


c'est pour des tests d'affichage !

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 21:48 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
vous pourriez me corriger ?
pour savoir si c'est juste entre les instructions et les commentaires !
merci.

Code:
ma_var EQU $7005     ; je déclare que ma_var c'est l'adresse $7005

LDA #1                       ; je mets la valeur 1 dans A
STA ma_var                ; je mets la valeur de A (qui est 1) dans l'adresse mémoire $7005

STB   ma_var*$2000,X  ; je mets la valeur B+1*$2000 dans X

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 11 Jan 2020, 22:01 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Ou là non il y a pleins de trucs qui ne vont pas.

Déjà "ma_var" n'est pas une variable (zone mémoire réservée), mais une adresse random à laquel se trouvera peut être d'autre chose. Il faut déclarer cela proprement avec
Code:
ma_var
    RMB  1  ; 1 octet
Ensuite qu'entends tu par "ma_var*$2000,X". Ca veut dire quelque chose en asm. Ca se compilera, mais c'est probablement pas ce que tu veux dire. J'imagine que tu veux faire "STB ,X" si ma_var==0 et "STB $2000,X" si ma_var==1. Mais c'est pas du tout ce que ca fait.

Ce que ca fait à la compilation c'est calculer $7005*$2000 (oui ca multiplie la valeur de ton adresse par $2000), ce qui donne un nombre sur 32bits ($E00A000), lequel est tronqué à 16bits (le poids faible: $A000). Donc c'est compilé comme "STB $A000,X" et cela indépendamment du contenu de "ma_var".

Le coup du multiplié par le contenu d'une zone mémoire variable dans l'adresse est un truc qui n'existe pas dans les instructions du 6809. Il fait des choses bien plus simples, bien plus primitives. Il faut assembler plusieurs de ces choses simples pour réaliser l'opération complexe que tu veux faire. Par exemple pourquoi ne fais tu pas
Code:
   TST  ma_var
   BEQ  var_est_nul
   STB  $2000,X
   BRA  suite
var_est_nul
   STB   ,X
suite
   ...
Note aussi le commentaire "je mets la valeur B+1*$2000 dans X". Non STB ne mets rien dans X. Il va juste sauver B à l'adresse qu'on lui passe, ici c'est ($E000,X) c'est à dire X+$E000. Rien à voir avec que tu tu décris en commentaire.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 12 Jan 2020, 18:57 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
(je déplace le post ici car ça n'a rien à voir avec de l'image !)

(Désolé j'ai un peu bombardé mes problèmes d'un coup ! mais j'étais tellement content que ça marche, que ça m'a stoppé net ma joie quant ça à foiré sur le vrai TO8 :cry: )

sujet : programme .bin ok sur DCMOTO mais plante sur un TO8(256k)

1 - Y'a moyen de lancer en faisant un loadm"pro.bas",,R ?
faut le coder dans le code assembleur ça ?

---------------------------------

2 - j'ai pas besoin de revenir au basic donc la ligne
PSHS A,B,X,Y,U,DP,CC <----- je le vire ?

---------------------------------
3 - mon prog commence en $8000 mais dedans je fais ça
Code:
sprx      EQU   $7000       * position sprite x
spry      EQU   $7001       * position sprite y
sprw      EQU   $7002       * sprite width
sprh      EQU   $7003       * sprite height
sprnum    EQU   $7004       * num sprite
tpm_swap_2000 EQU $7005     * current value = $2000 ou ECRAN


du coup j'utilise les adresses $7000 et $7001 en dehors de mon prog pour pas interférer avec mon code en $8000
mais je peux faire ça ? faut que je réserve aussi ces espaces ?

-----------
4 - pour infos j'ai utilisé ce bout de code(merci pulsdemos) pour le swap ecran

Code:
SCRC
        LDB  SCRC0+1
        ANDB #$80          * BANK1 utilisee ou pas pour l affichage , fond couleur 0
        ORB #$09           * contour ecran
        STB  $E7DD          * change contour couleur
        COM  SCRC0+1
SCRC0
        LDB  #$00
        ANDB #$02          * page RAM no0 ou no2 utilisee dans l espace cartouche
        ORB  #$60           * espace cartouche recouvert par RAM , ecriture autorisee
        STB  $E7E6
        *CLR $E7CF
        RTS



... je vais re-potasser certaines bases sur les clear mémoire adresse etc....

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 13 Jan 2020, 08:31 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
adnz a écrit:
1 - Y'a moyen de lancer en faisant un loadm"pro.bas",,R ?
faut le coder dans le code assembleur ça ?
LOADM un programme BASIC, non ca ne marchera pas. En revanche tu peux parfaitement te faire un lanceur en basic qui va faire le CLEAR approprié, effacer l'écran et le curseur, passer en mode graphique BM16, puis LOADM le programme binaire et le lancer. Si tu sauve ce lanceur basic sous le nom "AUTO.BAT", il sera lancé automatiquement par appui sur le "B" du menu.
Citation:
2 - j'ai pas besoin de revenir au basic donc la ligne
PSHS A,B,X,Y,U,DP,CC <----- je le vire ?
Oui si tu veux, a condition de ne jamais sortir du programme autrement que par un "JMP [$FFFE]" (reset).

Citation:
3 - mon prog commence en $8000 mais dedans je fais ça
Code:
sprx      EQU   $7000       * position sprite x
spry      EQU   $7001       * position sprite y
sprw      EQU   $7002       * sprite width
sprh      EQU   $7003       * sprite height
sprnum    EQU   $7004       * num sprite
tpm_swap_2000 EQU $7005     * current value = $2000 ou ECRAN
Ce n'est pas comme cela qu'il faut réserver des variables. Typiquement en les mettant "en dessous" de ton programme elles risquent d'être écrasées par la pile. En effet, etant donné que tu n'initialise probablement pas la pile dans ton programme, tu hérites de celle de l'appelant (le basic). Or si tu réserves $8000-$DFFF, le basic va positionner la pile en dessous, donc potentiellement à l'endroit que tu utilises pour tes variables, et quand dans ton programme tu va appeler une routine, ou qu'une interruption matérielle se produit et que le moniteur appelle les routines de services, des valeurs sont mises sur la pile, donc potentiellement à la place des valeurs de tes variables. Pour éviter ce soucis, il te faut remonter ces variables au dessus de $8000, cad dans la zone que tu as réservée pour ton programme.

Ok quelle adresse me dira tu? N'en choisis aucune de particulière, mais laisse l'assembleur faire le travail en utilisant les commades RMB n'importe où dans ton code (mais dans un endroit facilement accessible pour les modifications, par exemple vers la fin de ton programme. Il n'y aura pas de pb, tu peux référencer les labels avant leur déclaration comme tu le fais avec les étiquettes des routines)
Code:
sprx      RMB   1       * position sprite x
spry      RMB   1       * position sprite y
sprw      RMB   1       * sprite width
sprh      RMB   1       * sprite height
sprnum    RMB   1       * num sprite
tpm_swap_2000 RMB 1     * current value = $2000 ou ECRAN

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 13 Jan 2020, 10:08 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
super merci pour ces précisions .

j'ai besoin de sauver le compteur PC avant de faire mes RMB ?

ça me provoque un : Binary Not Linear à la compilation !



PS:

ahh zut soucis de compilateur avec le 0.83, je regarde un ancien post (viewtopic.php?f=10&t=360)

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 13 Jan 2020, 10:17 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
adnz a écrit:
j'ai besoin de sauver le compteur PC avant de faire mes RMB ?

Heu.. je ne comprends pas la question. Attention "RMB n" n'est pas une instruction processeur, mais une directive de l'assembleur pour qu'il avance son adresse d'assemblage de n octets, laissant ainsi un "trou" pour y placer ce qu'on veut. Un variable par exemple. Donc il ne faut pas placer ce RMB en plein milieu d'un code, mais à coté (après un JMP/BRA ou RTS ou typiquement à la toute fin du programme source.)
Citation:
ça me provoque un : Binary Not Linear à la compilation !

Oui RMB laisse de trous non initialisés s'ils sont placés au milieu du code. En les placant en toute fin du programme il n'y aura pas de trous. On peut aussi utiliser "FCB x" ou "FDB y" pour allouer 1 ou deux octets initialisés à x ou y donc sans faire de trous.

Je ne sais pas quel assembleur tu utilises, mais il doit y avoir une option pour faire un exe linéaire (en gros il remplis les trous du RMB). Mais le mieux est de mettre les RMB en fin de fichier.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 13 Jan 2020, 10:24 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
je place mes RMB après le END je suppose ! (j'ai un END tout à la fin de mon code)

puis en haut je fais

sprx EQU *

?

_________________
Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 13 Jan 2020, 10:28 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Non après le END l'assembleur ne fait plus rien. Disons entre la dernière instruction CPU et le END.

Après oublies les EQU. Tu places justes ton label sprx juste avant son RMB. Ainsi sprx sera l'adresse mémoire réservée par le RMB qui suit. Tu vois le truc?

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 13 Jan 2020, 10:30 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
ok je vois merci.

j'avais pas capter le après la dernière instruction CPU !

_________________
Image


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 281 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6 ... 19  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 38 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com