Logicielsmoto.com

Nous sommes le 28 Mar 2024, 13:04

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 36 messages ]  Aller à la page 1, 2, 3  Suivante
Auteur Message
MessagePosté: 26 Oct 2020, 20:55 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Bonjour

Toujours dans la perspective de développer Bubble Bobble pour les TO8, il s'avère qu'il me faut absolument pouvoir utiliser le Gate Array mode page, autrement dit, pouvoir alterner les pages physique 2 et 3 pour l'affichage écran (la RAM Logique dans l'espace H4000 peut pointer sur une des banques 0 à 3, en excluant la 1 qui sert pour le système).

Mais il se trouve qu'apparemment il y a des difficulté à travailler sur la RAM Data et à afficher ce que je souhaite...

Voici des extrait de code
Code:
************************************
ECRDEB EQU $A000 RAMEcran Couleur debut
* Affichage d'un caractere
PUTC EQU $E803
*Timer
KBIN EQU $E830 a appeler fin procedure timer
STATUT EQU $6019 b5 pour valider timer
TIMEPT EQU $6027 Adresse routine timer
IRQPT EQU $6021 Adresse routine timer
TCR EQU $E7C5 Registre controle timer (???)
TSB EQU $E7C6 Valeur (16bits) timer en nombre de 8 cycles
REGSY1 EQU $E7E7 Registre Systeme 1
REGSY2 EQU $E7DD Registre Systeme 2
RAMDAT EQU $E7E5 Registre RAM donnees
**************************************
*******************************
*Routine changement de banque
*en RAM Logique A000-DFFF
*Via Gate Array mode page
*(TO8 MO6 et TO9+)
********************************
CHBNK1 *
 LDA >BNKRM1 2 ou 3 ?
 EORA #1 XOR complement bit 1.
 STA >BNKRM1
 LDA >RAMDAT Registre RAM Donnees
 ANDA #224 Mise à 0 des bits 4-0
 ORA >BNKRM1 Ajout bank Ram
 STA >RAMDAT
 RTS
*******************************
*Routine changement banque RAM
*Pour Ecran Logique 4000-5FFF
*Gate Array mode page
*(TO8 MO6 et TO9+)
********************************
CHECR *
 LDA >BNKRM1 2 ou 3
 LDB #64 decalage 6b gauche
 MUL
 STB >BNKVID
 LDA >REGSY2
 ANDA #63
 ORA >BNKVID
 STA >REGSY2
 RTS
**********************************
---
 LDA >REGSY1 Activation Mode Page..
 ORA $16 ...pour Banques RAM
 STA >REGSY1
...
 JSR >CHBNK1 bascule entre bnk2 et 3
...
 JSR >CHECR ecran logique vers bnkram


Le code Basic se sert de
Code:
1 BANK2:clear,,,&H71FF:bank1


Comment ça se passe normalement ? D'après la doc technique, j'ai cru comprendre que l'on peut travailler sur des "écran" en travaillant sur les banques allouées à la RAMDATA (directement dessus) ce après quoi, on bascule l'affichage écran sur la banque physique sur laquelle on a travaillé. C'est pourtant ce que j'ai fait ici mais apparemment ça ne fonctionne pas correctement (les Sprites ne sont affichés qu'à moitié et ce ne sont pas les bonnes données de Sprite, et une seule des 2 banques sur laquelle je travaille semble fonctionner, ça doit être la 2 je pense).

J'ai déjà écrit complètement le bon code pour les Sprites bm16c, ça fonctionne bien en dehors de l'utilisation du gate Array (juste via la zone d'adresse logique $4000-$5FFF)

Quelqu'un a déjà utilisé le gate array mode page ?


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Oct 2020, 22:18 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 433
Localisation: Var
Regarde page 123 dans le manuel technique du To8, il y a une subtilité qui peut expliquer ton problème.
Je ne peux pas détailler car en déplacement et pas d’ordi sous la main... mais suivant l’endroit ou tu montes ta page (espace données ou cartouche) les données ne sont pas dans le même ordre (par bloc de 4k).


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 27 Oct 2020, 15:47 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Bentoc a écrit:
Regarde page 123 dans le manuel technique du To8, il y a une subtilité qui peut expliquer ton problème.
Je ne peux pas détailler car en déplacement et pas d’ordi sous la main... mais suivant l’endroit ou tu montes ta page (espace données ou cartouche) les données ne sont pas dans le même ordre (par bloc de 4k).


Bonjour Bentoc

Oui ça je l'avais intégré depuis le début le fait que l'espace Data pour l'écran avait ddans les adresse basse la RAMB et adresse haute la RAMA (p121 4ème item)

Mais le soucis ici est le basculement de la RAM vidéo vers les banque 2 ou 3. Je viens de faire un test simple en Basic avec la banque 2 (pour numéro commençant à bank 0) et ça me fait un truc zébré de bleu horizontal sans affichage du sprite.

Code:
1 BANK3:clear,&h9FFF
2 DEFINT I-L
3 REGSYS1=&hE7E7:REGSYS2=&hE7DD:RAMDAT=&hE7E5
4 POKE REGSYS1,PEEK(REGSYS1) OR 16: REM activation du mode page
5 CLS
6 print CHR$(&h1b)+CHR$(&h5e) 'mode bm16
20 dim bubble%(64) : for i=0 to 63: read bubble%(i):next
21 RAM = &hA000+&h4000
40 BANK3 'qui est la banque physique d'indice 2
41 ADR = RAM : for i=0 to 15: POKE ADR,bubble%(2*i): POKE ADR+1,bubble%(2*i+1):ADR = ADR+40: nexti
42 ADR = RAM-&h4000 : for i=16 to 31: POKE ADR,bubble%(2*i): POKE ADR+1,bubble%(2*i+1):ADR = ADR+40: nexti
43 POKE REGSYS2, PEEK (REGSYS2) AND 63 OR 128
100 data 255, 255, 255, 255, 242, 51, 34, 35
101 data 114, 47, 2, 35, 2, 34, 2, 210
102 data 2, 210, 114, 2, 7, 37, 34, 37
103 data 247, 37, 247, 37, 151, 34, 151, 146
104 data 63, 255, 51, 255, 34, 63, 34, 255
105 data 114, 255, 7, 51, 7, 63, 7, 255
106 data 7, 51, 114, 63, 0, 255, 34, 255
107 data 114, 95, 114, 95, 153, 47, 153, 34
110 end


Je ne sais pas si le "CLEAR du basic sert à quelque chose (je n'ai pas l'impression) et en plus il semble y avoir déjà du data dans la banque 3 (BAsic, qui est la page 2 de la RAM). Sam Duvelder me suggère de voir avec la correspondance entre les BANK Basic et celles des pages de banques physique... Je pensais que l'on avait Bank 0 Phy = Bank1 Basic, Bank 1 Phys = Bank2 Basic etc, mais ça n'a pas l'air d'être le cas.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 27 Oct 2020, 17:50 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 433
Localisation: Var
Je ne suis pas du tout expert en basic ... mais si ça peut aider je chercherai dans cette direction :
dans le guide Thomson on ne peut utiliser BANK qu'avec une valeur de 1 à 14 ou 1 à 30
ce qui fait penser qu'il y a deux banques non positionnables en A000 depuis le basic

ça voudrais dire qu'en basic BANK1 serait la banque 2, BANK2 la banque 3, ...
donc à la place de ton BANK3:clear,&h9FFF
essaye BANK1:clear,&h9FFF

Mais aucune certitude la dessus ... je ne connais pas la correspondance des banques entre basic et asm
sinon il faut jouer du débugger dans dcmoto ...
dslé de ne pouvoir t'aider plus


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 27 Oct 2020, 20:39 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
oui je confirme,

exemple : BANK 4 en basic c'est bank 5 en assembleur.

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 11:40 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Il y a un problème dans l'animation en Gate Array chez moi (avec DC Moto)

Voici la vidéo
phpBB [video]


J'utilise la même base de code avec seulement un changement d'adressage en RAM Data (Puisque c'est en A000-DFFF, j'utilise la partie haute comme RAMA et parte basse comme RAMB)

Apparemment, le mode bm16c ne fonctionne pas pour les autres banques RAM, j'utilise le code suivant
Code:
 LDB #$1B sequence d echappement
 JSR PUTC
 LDB #$5E Mode bm16c
 JSR PUTC


Pour ce qui est de la sélection de la RAM banque sur laquelle travailler, j'utilise

Code:
*******************************
*Routine changement de banque
*en RAM Logique A000-DFFF
*Via Gate Array mode page
*(TO8 MO6 et TO9+)
********************************
CHBNK1 *
 LDA >RAMDAT Registre $E7E5
 ANDA #224 Mise à 0 des bits 4-0
 ORA >BNKRM1 Ajout bank Ram
 STA >RAMDAT
 RTS
*******************************
*Routine changement banque RAM
*Pour Ecran Logique 4000-5FFF
*Gate Array mode page
*(TO8 MO6 et TO9+)
********************************
CHECR *
 LDA >BNKRM1 2 doit contenir 0,2 ou 3
 LDB #64 decalage 6b gauche
 MUL
 STB >BNKVID
 LDA >REGSY2
 ANDA #63
 ORA >BNKVID
 STA >REGSY2
 RTS
************
*Programme principal
************
 LDA >REGSY1 Activation Mode Page..
 ORA $16 ...pour Banques RAM
 STA >REGSY1 Registre $E7E7


Depuis j'ai fait un vidage de la zone RAM en mettant tous les octet à 0, sensé être la couleur noire, mais il semble que ça donne du gris! Et comme vous le voyez sur la vidéo, le sprite n'a rien à voir avec ce que ça devrait afficher! De plus, il semble que le basculement de RAM ne soit pas bon (la banque 3 reste inchangée pourtant son contenu est modifié).


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 12:14 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Ca ne répond pas à mes problèmes...

Bon ben apparemment, le changement de mode "bm16" via putc ne semble pas fonctionner pour les affichages alternatif. Quand je vide la RAM Data avec des 0, ça affiche du gris!! (et pas du noir), le changement de banque via le b4 à 1 de E7E7 et l'utilisation de E7E5 ne semble pas fonctionner (quand je travaille sur la banque par ce biais ça ne fait aucun changement)

Comment passer en mode bm16 pour les banques 2 et 3 ? Comment as-tu fait ADNZ ?


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 12:40 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Attention $E7E7 n'est qu'en écriture seule. Quand on le lit on obtient n'importe quoi. Pour bien l'utiliser il faut lire $6081, modifier les bits qu'on veut, puis écrire $E7E7 et écrire $6081 pour garder trace de ce qu'on a mis dans $E7E7. Note: je dis 6081 de mémoire, mais c'est peut-être un autre endroit.. Il faut surveiller avec le débuggeur comment le moniteur thomson met à jour $E7E7 (=> point d’arrêt en écriture) pour trouver là où il écrit la copie de sauvegarde.

Pour la commutation de RAM à la mode "TO8", il faut s'assurer de ne pas être en mode émulation TO7 (commutation via le PIA), sinon ca marche moins bien.

Autre truc à savoir: la palette est inversée en mode BM16: la couleur $0 (noir) se trouve à l'entrée 8 de la palette (gris), et inversement, le 1 en 9 etc (sur TO9 c'est même pire, il y a les entrées 6 et 14 qui sont inversées en plus... un vrai foutoir pas possible le mode BM16 sur TO9, ca se voit qu'ils essuyaient les plâtres des modes graphiques étendus sur cette machine.)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 13:53 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Le problème du basculement a été effectué, ça venait d'un
"ORA #16"
Que j'avais écrit
"ORA $16"

En fait c'est bon j'ai résolu le problème!!

Ca vient du fait qu'il faut utiliser le régistre spécial "Gate Array" (en E7DC) pour définir la résolution de base de toutes les banque ram pour les TO8/TO9+/MO6 et non plus les PUTC! Et ça marche du tonnerre, plus aucun scintillement.
J'ajoute une vidéo...
phpBB [video]


Dernière édition par Neotenien le 28 Oct 2020, 15:42, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 14:20 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Si l'affichage BM16 ne reste pas, c'est que quelque chose reprogramme le mode d'affichage. Essaye de mettre un point d'arret en écriture sur $E7DC pour voir s'il est touché ou pas. S'il est touché alors qu'il ne le devrait pas, fais du pas à pas, suis les RTS, et essaye de deviner d'où ca vient. Sachant que tu touches $E7DD qui est juste à coté, il y a peut-être un lien.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 14:55 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
Salut, désolé j'avais plus d'électricité, ça viens juste de revenir ! pfff ...

Attend je check comment j'ai fais et te dis ça ... (et je remercie Samuel Devulder de m'avoir aider à dépatouiller tout ce bordel ;) )

...

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 15:19 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Samuel Devulder a écrit:
Si l'affichage BM16 ne reste pas, c'est que quelque chose reprogramme le mode d'affichage. Essaye de mettre un point d'arret en écriture sur $E7DC pour voir s'il est touché ou pas. S'il est touché alors qu'il ne le devrait pas, fais du pas à pas, suis les RTS, et essaye de deviner d'où ca vient. Sachant que tu touches $E7DD qui est juste à coté, il y a peut-être un lien.


Salut Samuel, je n'ai pas vu ta réponse et j'avais résolu le problème en fouinant un peu dans la doc technique.
C'était bien d'E7DC dont il s'agissait. Auparavant j'avais utilisé la procédure standard (double écriture ave PUTC avec 1B et 5E mais ceci ne doit fonctionner qu'avec la banque vidéo standard (en banque 0) pas avec les autres. Et c'est ce qui faisait que ça affichait en mode TO7. C'est quand même galère de ne pas avoir une doc plus précise sur les procédures...

Il me reste un dernier point, c'est qu'apparemment: la valeur du timer ne semble pas fonctionner.
Code:
 LDD #6249 Timer toutes les 1/20s
 STD TSB Registre $E7C6
 LDX #FUTIMR Routine d interruption
 STX TIMEPT

Je change la valeur dans D, à 6249 (sensé durer 4" mais reste à 8), 12499 (8") et 24499 (sensé durer 16 secondes mais ça reste à 8"!!)

Il doit y avoir quelque chose qui ne marche pas...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 15:22 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
adnz a écrit:
Salut, désolé j'avais plus d'électricité, ça viens juste de revenir ! pfff ...

Attend je check comment j'ai fais et te dis ça ... (et je remercie Samuel Devulder de m'avoir aider à dépatouiller tout ce bordel ;) )

...

Pas la peine ADNZ j'ai trouvé d'où ça venait, il falait utiliser un régistre spécial (E7DC) pour le mode vidéo et pas la procédure classique.

Tout fonctionne à part le changement de timer qui reste le même quand je change la valeur dans E7C6... (même ce qui est supposer mettre 16 seconde met toujours 8") mais bon ceci est accessoire, c'ets juste pour avoir du 20 image/s au lieu de 10...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 15:35 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
alors en effet j'ai :

note: moi c'est du full ASM, et j'utilise la memoire cartouche pour le swap video !

Code:
          ECRAN     SET   $0000


Passage en mode 160x200x16c
Code:
          LDA #$7B
          STA $E7DC


Initialisation de la routine de commutation de page video
pour l'utilisation de l'espace cartouche (&H0000 -> &H4FFF)
voir http://pulsdemos.com/vector02.html
Code:
          LDB $6081
          ORB #$10
          STB $6081
          STB $E7E7


j'ai encodé et décodé mes sprites en mémoire de cette façon :

33 35 b6 50 60 60 66 66 66 56 55 b5 3b 3b 33 DA 56 00 b0 30 00 05 0b b3 6b 65 66 55 55 bb bb DA b3 63 63 53 b3 33 33 33 33 33 b3 53 b3 b3 33 DA 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 DA CA

loader à partir d'un fichier .BIN puis fait comme ça pour les pointer.
Code:
* debut adresse des sprites de SPRITES.BIN --------------------------------
ready           EQU $a000
gameover        EQU $a088
pacgum          EQU $a13d
pac_r_1         EQU $a142
pac_r_2         EQU $a187
pac_r_close     EQU $a1cc
pac_l_1         EQU $a211
...etc......etc...


Image

la valeur DA c'est pour verifier si arrivé en bas
et la valeur CA c'est pour dire fin du sprite.

ET toutes mes routines d'affichage se base sur ECRAN ($0000) qui écrit sur écran en memoire
puis pour basculer cette écran vers l'écran visible je fais JSR SCRC *------ SWAP BUFFER TO VISIBLE ----

PS: oui j'aurais pu optimiser l'affichage en affichant tout les pixels ramA puis tous les pixels ramB pour faire le swap ramA/B une seul fois comme tu l'a dis ...
mais bon j'arrivais pas à tout gérer en meme temps à ce moment là. ;)

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Oct 2020, 16:24 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Normalement la routine du moniteur marche bien, indépendamment de la page visible. D'ailleurs si je mets un point d'arret en lecture/écriture sur $E7DD il n'y a aucun "hit" lors des PUTC: Le moniteur ne s'occupe pas de la page mappée à l'écran (c'est d'ailleurs marrant à faire en basic lors d'un affichage en 80 colonnes: poke &HE7DD,64 ==> on voit la page 0 du moniteur en haut de l'écran s'afficher et bouger pendant que le reste du basic ou du jeu basic (run) fonctionne. C'est aussi spédctaculaire de faire un DIR pendant ce temps, ou de charger des trucs sur le disk: on voit carrément le buffer disk se charger à l'écran)

Similairement en point d’arrêt en $E7DC ne montre aucun hit à part lors des commandes de changement de mode.

Bref: il n'y a pas de raison de devoir passer par le poke direct en $E7DC pour passer en BM16, sauf pour la facilité de mise en oeuvre.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 36 messages ]  Aller à la page 1, 2, 3  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 44 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 à:  
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com