Logicielsmoto.com http://www.logicielsmoto.com/phpBB/ |
|
Debut en asm sur TO8 http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=571 |
Page 2 sur 19 |
Auteur: | adnz [ 09 Déc 2018, 01:24 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
bon ok, j'ai fais un truc tout simple ça marche Code: ORG $8000 PSHS A,B,X,Y,U,DP,CC * Disable interrupts ORCC #80 * Paint screen with 0xAA pattern in FORME LDA #$AA LDX #$5f40 boucle STA ,-X CMPX #4000 BNE boucle PULS A,B,X,Y,U,DP,CC,PC RTS merci beaucoup, j'ai capté certaines choses du coup, top |
Auteur: | Samuel Devulder [ 09 Déc 2018, 11:09 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Ton org est en $A000, mais tu charges et lance l'execution en $8000, c'est à dire pas du tout à l'adresse que tu as prévue. Pas étonannt que ca plante du coup. [EDIT]et oui il faut préserver les registres pour revenir au basic. |
Auteur: | Prehisto [ 09 Déc 2018, 11:54 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Samuel Devulder a écrit: [EDIT]et oui il faut préserver les registres pour revenir au basic. S et DP surtout. CC éventuellement. |
Auteur: | Samuel Devulder [ 09 Déc 2018, 12:02 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Oui S et DP comme je l'avais indiqué dans >>ce message<< hier. Mais peut-être que ADNZ ne l'avait pas remarqué parmi les autres hypothèses possibles pour sa plante. Ah tiens, en regardant le dernier code ASM, je me rend compte que le RTS après le "PULS ...,PC" est inutile (jamais executé) car après le puls comme on récupère le PC, on retroune à l'appellant. |
Auteur: | adnz [ 09 Déc 2018, 13:56 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
ok donc si j'avais pas récupéré le PC, le RTS s'exécuterait si j'ai bien compris. re-ok donc en faite en sauvegardant le PC à l'entrée, c'est comme si je gardais l'adresse de l'execution du basic, donc en remettant le PC, c'est comme dire "reviens continuer d'executer le basic" ! |
Auteur: | Samuel Devulder [ 09 Déc 2018, 14:13 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Oui c'est exactement ca: le basic reprends juste après là où il a appellé ton code (commande EXEC). |
Auteur: | adnz [ 28 Déc 2018, 18:45 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Bon ça avance Je commence à kiffé un peu quant je vois que ça fonctionne Petit scroll bouclé en bitmap 16, bon je dois mettre en place une petite routine de double buffer pour pas voir cette effet d'affichage décalé. Faut que je potasse cette histoire de swap ram ! |
Auteur: | Samuel Devulder [ 28 Déc 2018, 19:25 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Cool! |
Auteur: | adnz [ 09 Jan 2020, 10:36 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
question : ça veux dire quoi le "LABEL_B+1" quant on écrit comme ça : pourquoi on ajoute 1 à une etiquette de sous-prog ? Code: LABEL_A
LDB LABEL_B+1 ... ... LABEL_B LDB #$00 ... <- ça veux dire d'executer cette ligne ? (LABEL_B+1ligne) ? ... RTS |
Auteur: | PulkoMandy [ 09 Jan 2020, 10:40 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Bonjour, C'est pour accéder à l'opérande de l'instruction (ici le #$00 de LDB #$00). On utilise ça en général pour faire du code auto-modifié: on change la valeur de cet opérande en dur dans l'instruction, et ensuite on exécute l'instruction (probablement plusieurs fois), et au final l'exécution est plus rapide. |
Auteur: | Samuel Devulder [ 09 Jan 2020, 15:40 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Oui c'est cracra, dangereux et tout, mais comme ca va plus vite et que le code n'est pas en rom, ca marche et j'utilise beaucoup cela dans mes démos. |
Auteur: | adnz [ 10 Jan 2020, 19:39 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
salut, J'ai repris et modifier ce bout de code qui s'auto-modifie, mais j'arrive pas à faire alterner, un coup jump à saut_2000 un coup jump à saut_0000 Code: swap_ramab_virtual
LDB swap_ramab_virtual0+1 ANDB #$80 cmpb $80 BEQ saut_2000 cmpb $00 BEQ saut_0000 COM swap_ramab_virtual0+1 swap_ramab_virtual0 LDB #$00 ANDB #$02 ORB #$60 RTS saut_0000 LEAX 1,X RTS saut_2000 LEAX $2000,X RTS |
Auteur: | Samuel Devulder [ 10 Jan 2020, 20:54 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
Bon j'essaye de comprendre le code mais c'est un peut difficile (je ne pige pas trop ce qu'il fait). Une remarque d'optim quand-même Code: LDB swap_ramab_virtual0+1 J'imagine que c'est CMPB #$80 et CMPB #$00 que tu veux faire (il manque le #). ANDB #$80 cmpb $80 BEQ saut_2000 cmpb $00 BEQ saut_0000 COM swap_ramab_virtual0+1 Déjà première remarque, tu peux économiser 1 octet en replaçant "CMPB #0" par TSTB. Ensuite, sachant que le résultat après le ANDB vaut soit $80 soit $00. Donc si le "BEQ saut_2000" n'est pas pris c'est que B vaut nécessairement $00, et donc le BEQ saut_0000 est pris. Bref tu peux éliminer le 2ème couple (CMPB/BEQ): Code: LDB swap_ramab_virtual0+1 ANDB #$80 cmpb $80 BEQ saut_2000 BRA saut_0000 COM swap_ramab_virtual0+1 Enfin, comme je le disais ANDB donne soit $80 soit $00. Donc la comparaison avec #$80 est en fait un BNE sur la sortie du ANDB. Chouette, on gagne encore une instruction: Code: LDB swap_ramab_virtual0+1 ANDB #$80 BNE saut_2000 BRA saut_0000 COM swap_ramab_virtual0+1 Enfin (bis), le ANDB extrait le bit de signe de B. Donc en fait ce qu'on teste, c'est avoir si B est >=0 ou <0, plus précisément ANDB #$80 suivi par BNE peut être remplacé par BMI sur la valeur de B lue: Code: LDB swap_ramab_virtual0+1 BMI saut_2000 BRA saut_0000 COM swap_ramab_virtual0+1 Le code est devenu tout simple. Mais ce que je le comprends pas c'est: comment diable atteint-on la ligne "COM swap_ramab_virtual0+1" ??? Ne serait-ce pas là ton bug ? (en passant outre le # manquant au CMPB qui était probablement une faute de recopie sur le forum). |
Auteur: | adnz [ 11 Jan 2020, 00:30 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
eu non tu a raison c'est #$80, je me suis effectivement trompé ! |
Auteur: | adnz [ 11 Jan 2020, 00:45 ] |
Sujet du message: | Re: Debut en asm sur TO8 |
ha ba oui pour atteindre COM swap_ramab_virtual0+1, c'est pour ça que j'essaye de faire 2 CMPB qui link ou pas à une sub routine avec un RTS qui reviens sur le 2eme CMPB link ou pas à une sub routine avec un RTS du coup 1 coup sur 2 y'en à 1 des 2 qui dois pas linké ver la sub routine genre CMPB #$80 BEQ saut_2000 * if B == $80 then gosub saut_2000 sinon ça continu... CMPB #$80 BNE saut_0000 * if B != $80 then gosub_saut_0000 sinon ça continu... COM swap_ramab_virtual0+1 ahhh, j'y suis presque, y'a plus qu'a resserrer le colonne noir ! |
Page 2 sur 19 | Heures au format UTC + 1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |