| CPC Rulez https://cpcrulez.fr/forum/ |
|
| [RESOLU] Problème mémoire et radotages! https://cpcrulez.fr/forum/viewtopic.php?f=4&t=5378 |
Page 1 sur 2 |
| Auteur : | Xavier [ 12 Déc 2014, 07:51 ] |
| Sujet du message : | [RESOLU] Problème mémoire et radotages! |
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 !!! |
|
| Auteur : | TotO [ 12 Déc 2014, 10:25 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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. |
|
| Auteur : | demoniakparadox [ 12 Déc 2014, 11:51 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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 |
|
| Auteur : | Xavier [ 12 Déc 2014, 12:42 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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"... |
|
| Auteur : | Xavier [ 12 Déc 2014, 12:54 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
Mais, PC pointe dans quelle banque dans ce cas? 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] |
|
| Auteur : | Xavier [ 12 Déc 2014, 14:32 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
???? 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? |
|
| Auteur : | TotO [ 12 Déc 2014, 15:52 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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. |
|
| Auteur : | Xavier [ 12 Déc 2014, 17:43 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
C'est OK! Je fais les modifs dans mes routines, pour libérer les 8K... et envoyer les datas en h4000. |
|
| Auteur : | Xavier [ 12 Déc 2014, 19:06 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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] |
|
| Auteur : | Subaru [ 12 Déc 2014, 19:14 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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
|
|
| Auteur : | AsT [ 12 Déc 2014, 19:50 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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 |
|
| Auteur : | Xavier [ 12 Déc 2014, 20:30 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
@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à.... |
|
| Auteur : | AsT [ 12 Déc 2014, 20:53 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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à. |
|
| Auteur : | Subaru [ 12 Déc 2014, 20:56 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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. ![]() Chuis pas une tête en adressage mémoire, mais pour moi la syntaxe correcte est: LOAD "dispdat.bin",&4000
|
|
| Auteur : | Xavier [ 12 Déc 2014, 21:02 ] |
| Sujet du message : | Re: Problème mémoire et radotages! |
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... Copier/coller=
|
|
| Page 1 sur 2 | Le fuseau horaire est UTC+1 heure |
| Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |
|