Logicielsmoto.com http://www.logicielsmoto.com/phpBB/ |
|
Debut en asm sur TO8 http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=571 |
Page 3 sur 19 |
Auteur: | Samuel Devulder [ 11 Jan 2020, 01:20 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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. |
Auteur: | adnz [ 11 Jan 2020, 02:14 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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... |
Auteur: | adnz [ 11 Jan 2020, 02:40 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
hoooooo ! c'est bon ! ho quel effort de ouf ! j'ai trouvé |
Auteur: | adnz [ 11 Jan 2020, 04:01 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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 ... |
Auteur: | adnz [ 11 Jan 2020, 16:16 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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) |
Auteur: | adnz [ 11 Jan 2020, 17:00 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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 ! |
Auteur: | adnz [ 11 Jan 2020, 21:48 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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 |
Auteur: | Samuel Devulder [ 11 Jan 2020, 22:01 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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 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. RMB 1 ; 1 octet 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 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.
BEQ var_est_nul STB $2000,X BRA suite var_est_nul STB ,X suite ... |
Auteur: | adnz [ 12 Jan 2020, 18:57 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
(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 ) 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.... |
Auteur: | Samuel Devulder [ 13 Jan 2020, 08:31 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
adnz a écrit: 1 - Y'a moyen de lancer en faisant un loadm"pro.bas",,R ? 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.faut le coder dans le code assembleur ça ? Citation: 2 - j'ai pas besoin de revenir au basic donc la ligne Oui si tu veux, a condition de ne jamais sortir du programme autrement que par un "JMP [$FFFE]" (reset).PSHS A,B,X,Y,U,DP,CC <----- je le vire ? Citation: 3 - mon prog commence en $8000 mais dedans je fais ça 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. 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 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 |
Auteur: | adnz [ 13 Jan 2020, 10:08 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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) |
Auteur: | Samuel Devulder [ 13 Jan 2020, 10:17 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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. |
Auteur: | adnz [ 13 Jan 2020, 10:24 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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 * ? |
Auteur: | Samuel Devulder [ 13 Jan 2020, 10:28 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
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? |
Auteur: | adnz [ 13 Jan 2020, 10:30 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
ok je vois merci. j'avais pas capter le après la dernière instruction CPU ! |
Page 3 sur 19 | Heures au format UTC + 1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |