Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 30 Nov 2025, 17:41

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


[RESOLU] Problème mémoire et radotages!

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 2
 [ 20 message(s) ]  Aller vers la page 1, 2  Suivant
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
Xavier
 Sujet du message : [RESOLU] Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 07:51 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
Salut,
Mes excuses pour cette question, qui semble redondante et déjà documentée...
Mais, j'ai besoin d'une nouvelle approche sur mon problème afin de continuer mon projet!

J'ai donc en projet d'adapter un jeu d'aventure en Basic.
Il s'agit de "Transylvania", déjà adapté pour Exel...
On en parle ici :http://forum.system-cfg.com/viewtopic.php?f=25&t=4549&start=90

Ce jeu fait dans les 20k, mais il charge une quantité impressionnante de données en variables.
Le jeu original semble utiliser une mémoire ... qui me manque cruellement sur une adaptation sur un CPC464 classique.
Il me faut donc utiliser (en partie) la mémoire étendue du 6128.
Avant même de "rêver" utiliser des méthodes de maquillage cosmétique!

Donc, pour faire maigrir le programme Basic, j'ai exporté le texte vers de l'assembleur.
En h8000 et h9E0B ... mais, un MEMORY &7FFF me coupe le programme Basic...
(Il traite toutes les conditions de déplacement, et de texte...)

Est-il possible de commuter les appels CALL Basic vers la RAM miroir de la banque?
Afin de lancer les programmes ASM depuis le basic...
Tout en restant avec un programme Basic supérieur à 16k (>h7FFF limite de banque!).
Sinon, Est-il possible de faire migrer ces routines en miroir de hC000 pour éviter l'effacement des données Basic lors du Swap de banque?

Code :
programme|  ASM:
Basic:   |
h4000    |  h8000
h9FFF    |  h9E0B
---------| ------
hA000 RSX|
hC000    |  SP GR


Soit :
* h4000-h9FFF : Programme Basic.
* hA000-RSX : RSX GRAPHIQUE "Super-Sprite" (CALL &A000)
* h8000-h9E0A : Routine affichage de réponses.(CALL &8000)
* h9E0B : Routine affichage de lieux. (CALL &9E0B)
* hC000 : Routine affichage des scènes GFX. (CALL &C000 miroir)
(programmes d'affichage GFX de 16x14 caractères stockés en mémoire vidéo banque miroir)

Merci de votre aide, car je ne sais plus où mettre mes routines ASM !!!


Haut
 Profil  
 
TotO
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 10:25 
Hors-ligne
VIP
VIP

Inscription : 13 Jan 2010, 14:25
Message(s) : 2282
Bonjour Xavier,

J'ai posté hier un programme BASIC qui permet de détecter la quantité de RAM sur un CPC.
viewtopic.php?f=2&t=5361#p27519

Tu peux t'en inspirer pour utiliser les 64K suplémentaires du 6128 (modes C0 et C4 à C7) et stocker tes données en &4000. C'est la façon la plus simple et la plus courante d'exploirer une extension RAM sur CPC.

J'espère que ça te sera utile. :)

_________________
Cent Pour Cent


Haut
 Profil  
 
demoniakparadox
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 11:51 
Hors-ligne
Rulezz
Rulezz

Inscription : 26 Août 2013, 11:55
Message(s) : 70
Pour résumer l'adressage mémoire du CPC 6128 :

Code :
                                    Numéro "bank" (out &7F00,xx)
               C0            C1            C2            C3            C4            C5            C6            C7
Adr Z80                                    Adr "logique"                     
0000-3FFF   00000-03FFF   00000-03FFF   10000-13FFF   00000-03FFF   00000-03FFF   00000-03FFF   00000-03FFF   00000-03FFF
4000-7FFF   04000-07FFF   04000-07FFF   14000-17FFF   0C000-0FFFF   10000-13FFF   14000-17FFF   18000-1BFFF   1C000-1FFFF
8000-BFFF   08000-0BFFF   08000-0BFFF   18000-1BFFF   08000-0BFFF   08000-0BFFF   08000-0BFFF   08000-0BFFF   08000-0BFFF
C000-FFFF   0C000-0FFFF   1C000-1FFFF   1C000-1FFFF   1C000-1FFFF   0C000-0FFFF   0C000-0FFFF   0C000-0FFFF   0C000-0FFFF


Haut
 Profil  
 
Xavier
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 12:42 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
Salut,
Pièce jointe :
ram.jpg


Donc, 64 k sur le Gate-Array et 64 K en CPU ?
Ou 64k et pas 128k?
ça expliquerait que la banque ne soit pas active...
Car l'émulateur n'est pas configuré avec la bonne ram...
Sur WinApe, le débogeur n'indique que les 64k, sauf en "any" ou l'on peut modifier la banque mémoire.

Mon exemple:
Dans le code suivant, je lis à l'écran des datas texte.
Sans l'appel en rom, car j'y ajoute des balises CRLF et un bit7 de validation au lieu de &00.
Donc, je mets ça en h8000 (ou plus haut...) et les datas en &4000 (16k); sur le miroir basic!
J'ai du louper un truc au niveau des substitutions et activations mémoire!
Un LD HL,(h8000) correspond bien à deux valeurs sur la partie 64K basse et 64k haute?
;* zone &4000-&7FFF I r1=&C1 I e1=&C5
LD HL,(h8000) et LD HL,(h8000+64k)
Ou bien le GA repositionne les banques dans tout les sens... ça m'a traversé l'esprits !!! Désolé...

Code :
;* BLOC
WRITE "ROOMDISP.BIN"

;* MEMORY BANK               I bank etendue
;* zone &0000-&3FFF I r0=&C0 I e0=&C4
;* zone &4000-&7FFF I r1=&C1 I e1=&C5
;* zone &8000-&BFFF I r2=&C2 I e2=&C6
;* zone &C000-&FFFF I r3=&C3 I e3=&C7

;*LD H,&00
;*LD L,&00
;*CALL &BB75      ; CURSOR POSITION @ (L,H)

ORG &9EB0
   DI
   CALL RES_RET
   CALL DISPLAY_REP
   EI
RET_TAG1
   NOP ; or RET if no key.
   CALL RES_RET
   CALL &BB00
   CALL &BB06
   CALL &BB00
   RET
RES_RET
   EX af,af'
   XOR A      ; A=0
   ld (RET_TAG1),A
   ld (RET_TAG2),A
   EX af,af'
   RET

DISPLAY_REP
   CP &2
        JR nz,no_key
   ld A,&C9
   ld (RET_TAG1),A
   ld (RET_TAG2),A
no_key
       LD b,(IX+&0)
       ld hl,TXT_DATAS
   inc b
   
SCAN_LOOP
   bit 7,(HL)
   inc HL
   jr z,SCAN_LOOP
   DJNZ SCAN_LOOP


loop_imp_cadena
      ld a,(hl)
      cp &7C
      jr z,new_line
      AND &7F
ret_nl
            call &bb5a
      BIT 7,(hl) ;  b7 TEST
      jr nz,exit_loop_imp_cadena

      inc hl
      jr loop_imp_cadena

exit_loop_imp_cadena

RET_TAG2   NOP ; or RET if no key.
           ld A,&C9
           ld (RET_TAG2),A
             ld hl,TXT_DATAS+1
      JR loop_imp_cadena

new_line
      ld a,&0d   ; para terminar hace un salto de línea
      call &bb5a
      ld a,&0a
      jr ret_nl
TXT_DATAS   
          ret
db &0d,&0a,&0d,&0a,"< PRESS A KEY ",&BE

db "facing an ancient stump covered with faint writin","g" or 128
db "standing near a broken horse|wago","n" or 128
db "in a dark area of the fores","t" or 128


Certains commentaires ont honteusement étaient copier "As IS"...


Vous n’êtes pas autorisé(e) à consulter les fichiers insérés à ce message.


Dernière édition par Xavier le 12 Déc 2014, 12:58, édité 1 fois.

Haut
 Profil  
 
Xavier
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 12:54 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
Mais, PC pointe dans quelle banque dans ce cas?
:oops:
OUT >>> Banque DATA
NOP ||| LD a,(HL)
NOP...NOP....NOP ||| <<< OUT banque CPU
on continue le programme sur la banque CPU ?
Donc, dans ce cas, il faut prévoir un retour sur la banque miroir en vis à vis ?
Dois-je embaucher un comptable pour tous ces problèmes bancaires?

[EDIT]
*on continue le programme sur la banque CPU ?
J'ai la fâcheuse habitude de répondre à mes propres questions ... dans mes messages.
Donc, le PC reste à la même adresse, si le contenu de la ram change, les mnémoniques suivantes sont modifiées.
*Donc, dans ce cas, il faut prévoir un retour sur la banque miroir en vis à vis ?
Bhen, pas si c'est une banque différente!
[/EDIT]


Haut
 Profil  
 
Xavier
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 14:32 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
????
Code :
60 OUT &7F00,&C0:POKE &4000,&EE:OUT &7F00,&C0:vga=PEEK(&4000)

Faut-il basculer le gate-array à chaque lecture/écriture?
Apparemment, c'est le cas!!!
ça expliquerait la disparition des infos dans mon programme!
C'est le basic ou une bascule hard au niveau CSram?


Haut
 Profil  
 
TotO
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 15:52 
Hors-ligne
VIP
VIP

Inscription : 13 Jan 2010, 14:25
Message(s) : 2282
Non, il faut juste s'assurer de faire un OUT &7F00,&C0 avant de rendre la main au BASIC.
La ligne 60 et 70 de mon programme sont la par principe, mais ne servent pas à grand chose vu que tous les CPC on au moins 64K de RAM en C0.

En gros, &C0 pointe sur les 16K en &4000-&7FFF internes à tous CPC.
&C4, &C5, &C6, &C7 correspondes au 4x16K des 64K du 6128 sur cette même plage d'adresses.

Du coup, il faut voir le 6128 comme utilisant 48K fixes + 5x16K interchangeables.
C'est donc ici que tu vas stocker tout ce qui te prends de la place mais que tu n'es pas obligé d'avoir en même temps.
(si une portion est obligatoirement fixe, il faudra la dupliquer 5 fois)

En suite, via un OUT à adresse &7F00 tu choisis simplement quelle page tu utilises.

_________________
Cent Pour Cent


Haut
 Profil  
 
Xavier
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 17:43 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
C'est OK!
Je fais les modifs dans mes routines, pour libérer les 8K... et envoyer les datas en h4000.


Haut
 Profil  
 
Xavier
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 19:06 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
Donc,
1 MODE 1: MEMORY &9FFF
4 LOAD "disp.bin",&A000:BORDER 6:OUT &7F00,&C5:LOAD "dispdat.bin":',&4000

Me fait un "memory full" sur le chargement en &4000... au dessous du RAMtop!
C'est bête, je réservais &C3 pour les routines d'affichage!

En modifiant ainsi?
1 MODE 1:OUT &7F00,&C5:LOAD "dispdat.bin": MEMORY &9FFF:LOAD "disp.bin",&A000

dispdat.bin=data à afficher.
disp.bin=ASM de lecture Datas.

[EDIT]Nan! Memory foool... même chose.[/EDIT]


Haut
 Profil  
 
Subaru
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 19:14 
Hors-ligne
Rulezzz
Rulezzz
Avatar de l’utilisateur

Inscription : 23 Juin 2013, 01:05
Message(s) : 438
Xavier a écrit :
Donc,
1 MODE 1: MEMORY &9FFF
4 LOAD "disp.bin",&A000:BORDER 6:OUT &7F00,&C5:LOAD "dispdat.bin":',&4000

Me fait un "memory full" sur le chargement en &4000... au dessous du RAMtop!
C'est bête, je réservais &C3 pour les routines d'affichage!
...


Pourquoi ya un :' aprés ton load ????

Citer :
LOAD "dispdat.bin":',&4000

_________________
"A L'HEURE OU BLANCHIT LA CAMPAGNE... (COURAGE, FUYONS !!!)"


Haut
 Profil  
 
AsT
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 19:50 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 29 Août 2007, 08:04
Message(s) : 751
Localisation : Impact Hq
Mis à part, l'erreur que souligne notre charmante Subaru, quand tu charges un fichier en #4000, un memory #3fff est nécessaire.
Ton loader donne donc :
Code :
10 mode 1:memory &3fff
20 out&7fc5:load"dispdat.bin",&4000
30 load"disp.bin",&a000

_________________
AsT / iMP4CT

Retrouvez nous sur le forum Amstrad Plus
"Call &bb06"


Haut
 Profil  
 
Xavier
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 20:30 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
@Subaru
Citer :
Pourquoi ya un :' aprés ton load ????

Curiosité du Basic ferroviaire !
10 ' ****** REM *******
20 ?"***PRINT*****"

A noter:
20 ?"***PRINT*****" ' affichage.
Fonctionne.
20 ?"***PRINT*****" REM affichage.
Ne fonctionne pas sans les deux points.
20 ?"***PRINT*****" ? "affichage"
Ne fonctionne pas.

Cette fonction REM :" ' " ne fait pas gagner de place mémoire car codée sur 2 octets
Alors que la fonction REM, l'est sur un seul.

Donc, pour être "Faire-play" avec Subaru...
Il y a effectivement une erreur : [ LOAD"truc" ' ,&4000 ] aurai suffit (je gagne un octet!)
Bien vu et bien joué!


@AsT
Citer :
Mis à part, l'erreur que souligne notre charmante Subaru, quand tu charges un fichier en #4000, un memory #3fff est nécessaire.

Oui, mais mon programme Basic fait 20k sans les variables d'exécution.
Et le "OUT &7F00,&C5:" change la banque mémoire vers l'adressage h14000 de la mémoire paginée du CPC6128. Donc, sur ce coup là, le basic ne voie pas la différence entre &4000 et &14000 ... Pas bon.
Avec un &3FFF, je perds la suite du programme Basic... et j'ai fait le teste du OPENOUT"D":MEMORY&3FF:CLOSEOUT... mais pas de possibilité de réinitialiser le MEMORY!
(Merci pour les liens vers CPClive!)
Donc, walà....


Haut
 Profil  
 
AsT
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 20:53 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 29 Août 2007, 08:04
Message(s) : 751
Localisation : Impact Hq
Après tu peux faire un

Out &7f00,&c1: load"dispdat.bin",&c000:Out &7f00,&c0
Mais le fichier sera chargé dans la Bank c7 et non c5....

Voilà.

_________________
AsT / iMP4CT

Retrouvez nous sur le forum Amstrad Plus
"Call &bb06"


Haut
 Profil  
 
Subaru
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 20:56 
Hors-ligne
Rulezzz
Rulezzz
Avatar de l’utilisateur

Inscription : 23 Juin 2013, 01:05
Message(s) : 438
Xavier a écrit :
@Subaru
Citer :
Pourquoi ya un :' aprés ton load ????

Curiosité du Basic ferroviaire !
10 ' ****** REM *******
20 ?"***PRINT*****"

A noter:
20 ?"***PRINT*****" ' affichage.
Fonctionne.
20 ?"***PRINT*****" REM affichage.
Ne fonctionne pas sans les deux points.
20 ?"***PRINT*****" ? "affichage"
Ne fonctionne pas.

Cette fonction REM :" ' " ne fait pas gagner de place mémoire car codée sur 2 octets
Alors que la fonction REM, l'est sur un seul.

Donc, pour être "Faire-play" avec Subaru...
Il y a effectivement une erreur : [ LOAD"truc" ' ,&4000 ] aurai suffit (je gagne un octet!)
Bien vu et bien joué!


En fait, c'est surtout que si tu fous un ":" et/ou un " ' "aprés ton load, bah... ton adressage "&4000" passe à la trappe. Image

Chuis pas une tête en adressage mémoire, mais pour moi la syntaxe correcte est:

LOAD "dispdat.bin",&4000

Image

_________________
"A L'HEURE OU BLANCHIT LA CAMPAGNE... (COURAGE, FUYONS !!!)"


Haut
 Profil  
 
Xavier
 Sujet du message : Re: Problème mémoire et radotages!
Message Publié : 12 Déc 2014, 21:02 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
Tu me fous le cafard!
ça va finir par un jeu sans texte et sans dessins...
Le &1C000 je le réservais pour les données graphiques.
Je peux essayer de faire un tampon en 1C000 et faire un LDIR vers le 4000, au nez et à la barbe du basic!
Je vais faire le test...

@Subaru
J'ai déjà donné l'offset &4000 à l'enregistrement, donc nul besoin de le réorienté.
Non, le chtruc d'après le "load" est un reliquat de test... :oops:

Copier/coller= :pig:


Dernière édition par Xavier le 12 Déc 2014, 21:23, édité 2 fois.

Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 2
 [ 20 message(s) ]  Aller vers la page 1, 2  Suivant

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 21 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

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.