Hello les joyeux cpcistes, y encore de la vie la dedans ?
Voilà je suis un petit nouveau, je cherche à realiser un petit projet à mon niveau, en asm (je sais déjà programmer en asm, mais pas trop celui du z80, et encore moins pour l'optimisation et les particularités du CPC).
J'aurais besoin d'une petit explication sur la RAM du CPC.
Dans quelles conditions peut-on utiliser le maximum de RAM (sur les premiers 64k), et combien ça fait ? Pas beaucoup de données pour le moment, mais besoin de 2 pages écrans et en oversan (enfin, plus tard l'overscan, pour le moment je travail sur un ecran normal mais autant garder tout de suite la place qu'il faut). Je sais pas si ça a une importance mais je ne compte pas utiliser ni interruption, ni vecteur systeme, ni quoi que ce soit qui consomme le moindre octet inutilement.
Inscription : 13 Jan 2010, 14:25 Message(s) : 2270
Un overscan en 368x264 prend un peut moins de 24K. (ou 384x256 exactement, mais c'est moins probant) Si tu dois avoir 2 écrans, ça bouffe donc 48K et te laisse 16K pour le reste.
Oui certes, j'avais déjà fait ce calcul. Mais donc on peut utiliser tout la RAM, de &0000 à &FFFF ? Non, je pense ? Si oui y a t'il des choses à faire, ou ne pas faire ?
edit : et en fait, il n'y a qu'une partie de l'écran que je veux en double. La portion correspondant à un écran normal moins 8 lignes.
Inscription : 13 Jan 2010, 14:25 Message(s) : 2270
Oui, tu peux tout utiliser à condition de ne plus faire d'appels à des routines systèmes, vu que tu écrases tout ce qu'il y a en RAM pour faire fonctionner ton programme. Enfin, la je ne m'y connais pas suffisamment pour t'en dire plus.
Mais donc on peut utiliser tout la RAM, de &0000 à &FFFF ? Non, je pense ? Si oui y a t'il des choses à faire, ou ne pas faire ?
Salut,
Fais attention à la pile, afin de ne pas l'écraser avec ton graphe ou l'inverse!
Il te faudra surement la déplacer (Ld sp,xxxx).
Les interruptions sont situées en &38.
Je pense que tu peux trouver la map de la mémoire quelque part ici ou, de manière sure, dans le bouquin Les Clefs pour Amstrad (pages 108/109/110 pour le bas de la mémoire.
Je sais plus d'ou je tiens çà, je l'avais copié/collé dans un coin :
de #0000 à #003F : réservé (copie de la ROM inférieure) (64 octets) de #0040 à #016F : réservé basic (zone de saisie basic) (304 octets) de #0170 à #A679 : zone libre pour programme basic ou autre (42 Ko) de #A67A à #B8FA : zone réservée par le système (variables systèmes) (5Ko) de #B900 à #BDFF : zone réservée par le système (vecteurs systèmes) de #BE00 à #BE80 : zone réservée par l'Amsdos (si lecteur disquette présent) de #BE80 à #BEFF : libre de #BF00 à #BFFF : zone réservée par le système (pile) de #C000 à #FFFF : zone de mémoire écran (16 Ko)
si j'ai bien tout compris :
on ne peux rien faire de #0000 à #003F quoiqu'il arrive quoiqu'on fasse ? on peut ecrire de #0040 à #A679 tant qu'il n'y a pas de basic ? on peut ecrire de #B900 à #BDFF si on n'utilisa pas de vecteur système ? quid de #A67A à #B8FA et de #BE00 à #BE80, akoissassertoussa ?
et donc on peut faire ce que l'on veut partout ailleurs, à condition de loger la pile quelquepart là dedans ?
Excusez moi pour les questions de neuneu, en général je comprend vite, faut juste m'expliquer longtemps Merci
Inscription : 20 Août 2007, 18:21 Message(s) : 4988
les images en overscan utilise 32ko de ram vidéo.
1) NON tu peu utiliser la totalité des 64ko de la ram centrale (0000->&FFFF) du CPC, en redirigent ta pile comme te la indiqué eliot, et en coupant les interruptions avec l'instruction DI. Sinon laisse un EI:RET à l'adresse &38 , petite astuce ces deux octets peut ce trouver sur ton gfx si ta mémoire écran et configurer a cette endroit de la mémoire centrale.
Oui je pense que ca doit pas etre introuvable. Me demande si un pote a pas un plus qui prend la poussière dans sa cave. Quand je pense que j'avais chez mes parents il y a quelques années un 464 et un 664 neufs dans leurs cartons d'origine scellés, et que mon père les à foutus à la poubelle
Savoir que ces machines ont sans doute finis dans une décharge en Afrique à polluer leur terre et leur flotte... Alors qu'elles pourraient encore tourner aujourd'hui voire faire le bonheur d'un collectionneur...
Inscription : 28 Août 2008, 23:41 Message(s) : 257
Citer :
Je sais pas si ça a une importance mais je ne compte pas utiliser ni interruption, ni vecteur systeme, ni quoi que ce soit qui consomme le moindre octet inutilement.
C'est parfaitement possible d'utiliser 100% de la ram centrale (64 "premiers" ko) en tant que Ram Vidéo, par exemple, si tu n'utilises pas le système.
Il suffit de travailler dans la banque "7" avec les modes C1 et C3. Avec ces deux modes , la banque 7 est mappée entre C000 et FFFF et on peut accéder à 100% de la ram. En mode C1, les 48 premiers Ko sont mappés normalement entre 0000 et BFFF En mode C3, les 16 ko de ram centrale qui sont habituellement entre C000 et FFFF sont alors mappés entre 4000 & 7FFF.
Et si tu as besoin des interruptions, il suffit de les déplacer grâce au mode IM2 du Z80A, et donc de placer ta table de vecteurs d'interruptions en banque 7, avec ton programme. Tout comme la pile bien sûr.
Et si jamais tu considères que tu veux accéder aux autres banques à partir de ta banque "7", le mode C2 fait basculer les 3 banques supplémentaires entre 0000 et BFFF.
Ce qui fait de la banque "7" la page de 16k la plus "utile" d'un cpc, car elle est capable d'accéder à 100% de la ram en étant toujours connectée.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 49 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum