Logicielsmoto.com

Nous sommes le 26 Nov 2020, 04:17

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 115 messages ]  Aller à la page Précédente  1 ... 4, 5, 6, 7, 8
Auteur Message
MessagePosté: 27 Oct 2020, 18:03 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1303
Localisation: Brest
Citation:
- L'espace logique écran 4000-5FFF peut se voir attribuer les banques 0 à 3 via les b7b6 de E7DD. Sachant qu'il fait éviter le 1 et que par défaut (compatibilité) c'est la banque 0.

Non c'est pas comme ca que ca marche pour E7DD. C'est pas la zone $4000-5FFF qui est modifié. Celle là pointe toujours sur la banque physique fixe. $E7DD lui permet de modifier la bank physique que l'on va afficher. Si c'est 0 on affiche $4000-$5FFF, si c'est 1 on affiche la bank 1, 2 la bank 2, et 3 la bank 3. Ces bank là ne sont pas accessibles en $4000-5FFF. Il faut les mapper dans l'espace RAM en $A000-DFFF ou l'espace ROM en $0000-3FFF.

Ainsi un usage typique de l'organisation mémoire dans un jeu/démo est un truc comme ca:
Code:
$0000 }
  |   } une des bank 1,2,3 - utilisé pour le graphisme
$3FFF } (donc $E7DD et $E7E6 à modifier pour pointer sur 0, 1 ou 3)

$4000 }
  |   } bank 0 - utilisée pour stocker du code ou des data (invisible)
$5FFF }

$6000 }
  |   } ram système fixe contient code + data toujours accessible
9FFFF }

$A000 }
  |   } bank 4,5,..31 - utilisé pour code + data swappable ($E7E5)
$DFFF }

$E000 }
  |   } rom
$FFFF }

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 21 Fév 2020, 11:38
Messages: 119
Samuel Devulder a écrit:
Citation:
- L'espace logique écran 4000-5FFF peut se voir attribuer les banques 0 à 3 via les b7b6 de E7DD. Sachant qu'il fait éviter le 1 et que par défaut (compatibilité) c'est la banque 0.

Non c'est pas comme ca que ca marche pour E7DD. C'est pas la zone $4000-5FFF qui est modifié. Celle là pointe toujours sur la banque physique fixe. $E7DD lui permet de modifier la bank physique que l'on va afficher. Si c'est 0 on affiche $4000-$5FFF, si c'est 1 on affiche la bank 1, 2 la bank 2, et 3 la bank 3. Ces bank là ne sont pas accessibles en $4000-5FFF. Il faut les mapper dans l'espace RAM en $A000-DFFF ou l'espace ROM en $0000-3FFF.

Oui je me suis mal exprimé! Je voulais dire que l'affichage utilisait effectivelet les banques 0 à 3

Citation:
Ainsi un usage typique de l'organisation mémoire dans un jeu/démo est un truc comme ca:

Usage typique... mais

Citation:
Code:
$0000 }
  |   } une des bank 1,2,3 - utilisé pour le graphisme
$3FFF } (donc $E7DD et $E7E6 à modifier pour pointer sur 0, 1 ou 3)


Euh, 0, 2 ou 3 plutôt non ? (Manuel technique des TO8 p 120 et 121).
Et en vérité, on peut y mettre n'importe laquelle des banques

Citation:
Code:
$4000 }
  |   } bank 0 - utilisée pour stocker du code ou des data (invisible)
$5FFF }


Ceci est sensé être l'espace écran!! (Affichage banque 0 à 3 sauf le 1)!! Il n'est accessible en écriture que pour la banque 0 (compatibilité TO7). C'est à dire que quand on travaille sur cet espace, ça n'agira que sur la banque 0.

Citation:
Code:
$A000 }
  |   } bank 4,5,..31 - utilisé pour code + data swappable ($E7E5)
$DFFF }
$FFFF }


C'est là que je ne pige pas!!
Il est écrit dans le manuel technique:
«
-Si le CPU veut accéder aux pages 2 et 3 en les considérant comme des écrans, il doit les affecter à son espace 'RAM données' (ie espace A000-DFFF) afin de pouvoir les lire ou les écrire. Dans ce cas, on doit considérer que la mémoire RAMA (point) se trouve aux adresses hautes de la page (ie C000-DFFF), tandis que les adresses basses contiennent les informations RAMB (couleur); en effet, le bit forme traditionnel est inopérant dans l'espace 'données'
»
Page 121 des manuels techniques du TO8.

D'ailleurs, dans le code complet que j'ai mis plus haut, il y a bien une animation sur l'un des 2 espaces travaillés en RAM Données (je ne sais pas si c'est la bank 2 ou 3... en fait la banque 3 n'affiche rien).

Le mieux est sans doute que je mette une vidéo montrant ce qu'il se passe avec mon code... la voici
phpBB [video]


Dernière édition par Neotenien le 27 Oct 2020, 19:53, édité 1 fois.

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

Inscription: 21 Aoû 2006, 09:06
Messages: 1303
Localisation: Brest
Neotenien a écrit:
Citation:
Code:
$0000 }
  |   } une des bank 1,2,3 - utilisé pour le graphisme
$3FFF } (donc $E7DD et $E7E6 à modifier pour pointer sur 0, 1 ou 3)


Euh, 0, 2 ou 3 plutôt non ? (Manuel technique des TO8 p 120 et 121).
Et en vérité, on peut y mettre n'importe laquelle des banques

En fait ion peu mettre n'importe quelle bank RAM (0 à 31), mais les banques qui sont aussi utilisables en affichage (0 à 3) permettent d'accéder à la fois à la partie forme et fond sans passer par $E7C3. Afficher la banque utilisée en $4000 (bank/page 1) a peut d’intérêt car elle est toujours accessible pas loin, donc il n'y a pas un grand intérêt.

Aussi faire attention de lever le bit indiquant qu'on veut pouvoir écrire dans l'espace ROM, sinon ca marche moins bien.

Citation:
Ceci est sensé être l'espace écran!! (Affichage banque 0 à 3 sauf le 1)!! Il n'est accessible en écriture que pour la banque 0 (compatibilité TO7). C'est à dire que quand on travaille sur cet espace, ça n'agira que sur la banque 0.

Non $4000-$5FFF contient toujours la même banque physiques, la 1.. En fait la même moitié (8ko). L'autre moitié se trouve aux mêmes adresses en jouant sur le bit 0 de $E7C3.

Citation:
C'est là que je ne pige pas!!
Il est écrit dans le manuel tehcnique:
«
-Si le CPU veut accéder aux pages 2 et 3 en les considérant comme des écrans, il doit les affecter à son espace 'RAM données' (ie espace A000-DFFF) afin de pouvoir les lire ou les écrire. Dans ce cas, on doit considérer que la mémoire RAMA (point) se trouve aux adresses hautes de la page (ie C000-DFFF), tandis que les adresses basses contiennent les informations RAMB (couleur); en effet, le bit forme traditionnel est inopérant dans l'espace 'données'
»
Page 121 des manuels techniques.

Oui quel est le problème? Tu peux mettre les banks 2 ou 3 en $A000 (ou $0000), et aussi demander à l'automate d'affichage de les afficher. Il n'affiche pas $A000, mais les bank/pages physiques 2 ou 3 mappées à cette adresse là aussi: le CPU et l'automate d'affichage ont tous les deux accès aux même banques/pages physique.. A noter: que même si le CPU n'a pas mappé 2 ou 3 dans son espace mémoire et n'y a plus accès, l'automate continue d'afficher leur contenu dorénavant non modifiable par le CPU.

Cela permet d'avoir carrément une zone continue de RAM entre $0000 et $DFFF (56Ko) avec une organisation comme celle-ci: affichage bank 2 ou 3, bank N en espace rom: $0000->$3FFF, ancienne ram vidéo (page 0) qui n'est plus affichée et que l'on peut utiliser à loisir entre $4000->$5FFF (+ 8ko de ram cpu bonus à cette adresse via $E7C3), la ram système non commutable $6000->$9FFFF (page 1) et enfin la bank M de son choix (si possible différente des autres utilisées) en $A000->$DFFF. Le cpu dispose alors de la zone $0000->$DFFF d'un bloc pour faire ce qu'il veut sans perturber l'affichage qui lui utilise la bank 2 ou 3 comme demandé. Pas mal comme astuce pour avoir le max de ram, non ? Par contre ca n'est utile qu'en ASM bien entendu.

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 21 Fév 2020, 11:38
Messages: 119
Samuel on est d'accord sur à peu près tout à part que la banque RAM physique utilisée pour la zone logique 4000-5FFF est BIEN la 0 et pas la 1 (c'est écrit à de multiples reprises dans le manuel technique des TO8), la banque 1 sert pour la zone 6000-9fff.

Le problème n'est pas là, j'ai rajouté une vidéo sur mon post précédent pour voir ce qu'il se passe, la version "sans gate array" et celle "avec gate array" (code perso qui respecte scrupuleusement ce qui est écrit dans le manuel technique).

1/ La page RAM 2 semble défiler normalement pour l'animation pour les positions "paires" du sprite mais avec les mauvaises couleurs et le mauvais sprite (sans doute une mauvaise allocation de RAM pour les sprites et tiles)
2/ La page RAM 3 n'affiche AUCUNE animation (alors que pourtant ça utilise le même algorithme)

Faut-il vider chaque banque RAM avant d'y travailler en RAM écran ? (voir banque 2 et 3 qui ont des trucs bizarres affichés)

Purée j'ai hâte que tout ceci fonctionne. Alors le tryc chiant avec le gate array est que ça suppose un couple de coordonnées pour chaque sprite (celui de RAM 2 et RAM 3). Mais bo c'est nécessaire pour le jeu Double Bubble pour que les sprites qui se croisent n'effacent pas ceux du dessous (comme c'est le cas de nombreuses version, comme celle de la NES, de ZX Spectrum).


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

Inscription: 21 Aoû 2006, 09:06
Messages: 1303
Localisation: Brest
Arf oui en $4000 c'est bien la bank 0... faut que change de lunettes (il faut dire que c'est super mal écrit sur le DJVu en plus -- oh l'excuse! :oops:)

Au final 0 et 1 sont bloqués. Il ne reste que 2 & 3 pour faire du double-buffer.

Par contre les banques ram 2, 3, etc... contiennent le programme et les données du basic ($A000 de la bank-0-du-basic pointe sur la bank 2, celle de "bank 1" en basic sur la 3.. le fameux décalage dont je parlais). La zone horizontale en haut de l'écran est ton source basic (qui se situe bank-basic-0=bank-physique-2) qui est affiché! Tu peux t'amuser à ajouter plein de lignes au programme basic pour voir cette zone agrandir.

C'est pour ca que je disais ca ne marche bien qu'en ASM. Le basic utilise lui aussi les banks 2, 3 pour son compte. Je n'ai pas connaissance d'un moyen pour mettre source à partir des bank physiques 4 ou plus (c'est l'inverse d'un CLEAR qu'il faudrait).

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 21 Fév 2020, 11:38
Messages: 119
Samuel Devulder a écrit:
Arf oui en $4000 c'est bien la bank 0... faut que change de lunettes (il faut dire que c'est super mal écrit sur le DJVu en plus -- oh l'excuse! :oops:)

Au final 0 et 1 sont bloqués. Il ne reste que 2 & 3 pour faire du double-buffer.

Par contre les banques ram 2, 3, etc... contiennent le programme et les données du basic ($A000 de la bank-0-du-basic pointe sur la bank 2, celle de "bank 1" en basic sur la 3.. le fameux décalage dont je parlais). La zone horizontale en haut de l'écran est ton source basic (qui se situe bank-basic-0=bank-physique-2) qui est affiché! Tu peux t'amuser à ajouter plein de lignes au programme basic pour voir cette zone agrandir.

C'est pour ca que je disais ca ne marche bien qu'en ASM. Le basic utilise lui aussi les banks 2, 3 pour son compte. Je n'ai pas connaissance d'un moyen pour mettre source à partir des bank physiques 4 ou plus (c'est l'inverse d'un CLEAR qu'il faudrait).


Ah mince je me suis planté sur ce que je croyais être la zone du BASIC... Je pensais que ça commençait vers $6100 ? Ben du coup on met quoi dans la zone système ? ($6100-9FFF) ? Moi j'y ai mis des sprites (qu'on peut copier d'une banque RAM >=2 ?) et du code binaire (ça me parait difficile de mettre de l'ASM dans une RAM DATA vu qu'on peut les changer)

Bon alors, ce que je vais faire est:
- Vider en ASM la banque 2 et 3 (et du coup utiliser les fameux puls peut-être ?)
- Voir pourquoi ça n'affiche pas les bons sprites tiles en bank ram 2
- Voir pourquoi ça n'affiche rien en banque ram 3

Le code que j'ai créé pour le changement de RALM vidéo est celui ci
Code:
*******************************
*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  et pas 6x LSL... trop long
 STB >BNKVID
 LDA >REGSY2
 ANDA #63 Pour mettre a 0 les b7b6
 ORA >BNKVID contient 128 ou 192
 STA >REGSY2 =$E7DD Registre Systeme 2
 RTS


Oui en effet il faudrait un CLEAR inversé. Bon, ça suppose que je vide (en mettant du noir), les banques 2 et 3

Pour ce qui est du manuel technique, j'ai la chance de le posséder en format papier, il est plutôt très bien foutu même s'il y a des aspect électronique que je ne pige pas toujours.


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

Inscription: 21 Fév 2020, 11:38
Messages: 119
Citation:
Cela permet d'avoir carrément une zone continue de RAM entre $0000 et $DFFF (56Ko) avec une organisation comme celle-ci: affichage bank 2 ou 3, bank N en espace rom: $0000->$3FFF, ancienne ram vidéo (page 0) qui n'est plus affichée et que l'on peut utiliser à loisir entre $4000->$5FFF (+ 8ko de ram cpu bonus à cette adresse via $E7C3), la ram système non commutable $6000->$9FFFF (page 1) et enfin la bank M de son choix (si possible différente des autres utilisées) en $A000->$DFFF. Le cpu dispose alors de la zone $0000->$DFFF d'un bloc pour faire ce qu'il veut sans perturber l'affichage qui lui utilise la bank 2 ou 3 comme demandé. Pas mal comme astuce pour avoir le max de ram, non ? Par contre ca n'est utile qu'en ASM bien entendu.

Oui mais 32kO bouffé par le buffer d'écran (16kO) de fond ET l'écran (16kO) sur lequel on travaille à un instant T, sans compter qu'il y a le code assembleur... Même si le 6809 a de nombreuses instructions qui permettent de réduire sensiblement la taille du code/ 6502 ou ZX 81 ou même 6800 (comme la fonction mul au lieu de faire n fois une addition sur un seul accumulateur). Et ça peut vite être réduit par des zones de sprites, des tableaux diverses (que les instruction indexés du 6809 permettent grandement de manipuler aisément). Mais pour ce qui est des pile, fat être hyper prudent avec ça pour ne pas dépasser sur des zones "utiles" au logiciel. C'est d'ailleurs un peu aussi le risque avec le langage C d'ailleurs. Mais bon les malloc() et free() sont là... mais on ne sait pas trop où.


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

Inscription: 21 Aoû 2006, 09:06
Messages: 1303
Localisation: Brest
Le basic utilise aussi les zones $6100->$9FFF. Ce que je dis c'est que le source en mémoire débute en $a000, avant en on va trouver dans la zone système, en vrac: les pages de l'extra-moniteur, les buffers d'entrée sortie disk, les données internes à l'interpréteur basic, les variables et tableaux du programme, les chaines de caractères, la pile, etc.. Il peut aussi mettre certaines de ces données ailleurs. Bref: il fait un peu ce qu'il veut si on ne réserve pas les zones avec CLEAR.

J'avais aussi le manuel technique au format papier, mais je l'ai prêté dans une autre vie pour numérisation. Je n'ai jamais pu le récupéré. Tant pis, c'est le destin.
Citation:
Oui mais 32kO bouffé par le buffer d'écran (16kO) de fond ET l'écran (16kO)
Attention, l'écran c'est 2x8ko = 16ko au total. Mais tu parles peut-être du cas avec double buffer, auquel cas oui ca mange 2x16k. Cependant à chaque instant il n'y a qu'un seul de ces buffers dans la zone adressable par le CPU.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 19 Nov 2020, 11:12 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 119
Samuel Devulder a écrit:
Le basic utilise aussi les zones $6100->$9FFF. Ce que je dis c'est que le source en mémoire débute en $a000, avant en on va trouver dans la zone système, en vrac: les pages de l'extra-moniteur, les buffers d'entrée sortie disk, les données internes à l'interpréteur basic, les variables et tableaux du programme, les chaines de caractères, la pile, etc.. Il peut aussi mettre certaines de ces données ailleurs. Bref: il fait un peu ce qu'il veut si on ne réserve pas les zones avec CLEAR.

J'avais aussi le manuel technique au format papier, mais je l'ai prêté dans une autre vie pour numérisation. Je n'ai jamais pu le récupéré. Tant pis, c'est le destin.
Citation:
Oui mais 32kO bouffé par le buffer d'écran (16kO) de fond ET l'écran (16kO)
Attention, l'écran c'est 2x8ko = 16ko au total. Mais tu parles peut-être du cas avec double buffer, auquel cas oui ca mange 2x16k. Cependant à chaque instant il n'y a qu'un seul de ces buffers dans la zone adressable par le CPU.


Eh non on utilise bien les 32 kO puisqu'il faut faire un transfert de mémoire, dans la RAM logique... SI on a le buffer dans l'espace cartouche qu'on le transfère à partir de l'adresse A000 (T0)

Par contre, je me demande comment sont ajoutés de grands espaces comme dans les jeux "prohibition", "Bob Morane Science Fiction", "Avenger". Pour ce qui est de Slap Fight 1 et 2, ça doit utiliser un Map Data.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 19 Nov 2020, 11:49 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1303
Localisation: Brest
En général les jeux ne travaillent pas sur des bitmap, mais sur des tuiles. L'espace de jeu est alors un tableau d'entiers contenant le numéro de tuile à afficher à tel ou tel endroit. Les jeux à scrolls "par tuiles complètes" sont juste un décalade dans le tableau d'entier, et les scrolls par fraction de tuile utilisent une rangée de tuile caché dans le coté qui doit apparaitre et font un scroll physique du bitmap pour faire apparaitre progressivement cette rangée cachée. Le mix scroll physique sur un bitmap + tuiles ne nécessite de recréer la rangée de tuile cachées que lorsque l'ancienne a été totalement démasquée, c'est à dire pas très souvent. C'est donc très efficace si le scroll physique peut être fait en hardware ou en soft rapide.

_________________
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  [ 115 messages ]  Aller à la page Précédente  1 ... 4, 5, 6, 7, 8

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 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