Adressage memoire PCE

Le coin des demomakers et des programmeurs en herbe.

Modérateurs : SirG, Redfield1, shubibiman, Laucops

Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Message par xav »

Il faudrait demander a un specialiste ASM, parce qu'il me semble que sur le 6280 la pile commence à  2000h -> 21FFh.

La page Zero aussi d'ailleurs, mais vraiment tu devrais voir avec un specialiste, covel, macdonald ou toma.
Ils sont souvent sur le forum magic engine.

Adresse utile:

http://pcedev.mednafen.com/lick/Main_Page
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

Merci xav, Mooz pourrait peut etre me repondre, si il passe par la....une explication en francais est toujours plus comprehensible
:oops:

Sinon j'irais faire un tour sur IRC
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

Mooz m'a fait un petit cours tres instructif, j'ai enfin compris l'adressage de la pce !!!! Champagne !!

La pile commence à  $2100 à  $21FF, 256bytes donc 128 adresses

L'adressage en page zero $2000 à  $20FF.

Voici ZE lien :

http://turbo.mindrec.com/tginternals/hw/
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Message par MooZ »

Arg! Faut que je vienne plus souvent ici :/

Ouais sinon les addresses $2xxx signifie qu'on a mappé la RAM sur le mpr #1. Comme indiqué dans les tg internals, les adresses physiques sont:
  • 1F0200 - 1F1FFF => base scratch pad
  • 1F0100 - 1F01FF => la pile
  • 1F0000 - 1F00FF => zero page
Attention, on peut mapper cette zone sur n'importe quel mpr. Il n'y a pas de norme explicite. Généralement, tout ceci est fait dans le vecteur d'interruption de reset. De plus, c'est généralement mappé sur le mpr #1 (mais ca peut changer en cours de route :( ).

Mais qu'est ce donc que ces mprs? Eh ben c'est simple... Comme vous l'avez remarqué, les addresses physiques sont sur 21bits. Or en asm 6502 les addresses sont sur 16bits.
La technique consiste donc à  découper les zones addressables en blocs de 8ko (les banks). L'addresse logique (sur 16 bits) contient le mpr à  utiliser et l'offset dans le bloc de 8ko pointé par le mpr. On peut faire l'analogie entre les mprs et une table de "traduction" (ou une palette). Un petit exemple sera plus claire je pense.
Disons qu'on veuille stocker la valeur 32 dans le 10eme octet de la bss. L'addresse
physique de cet octet est :

addr=1F020A

On doit donc mapper le bloc de 8ko correspondant afin de pouvoir acceder à  cette addresse. Alors 8ko c'est 8192 bits, ou 2^13. On obtient donc le bloc en décalant l'addresse de 13 bits vers la droite.

bank = addr >> 13 (ce qui donne F8 )

On va faire comme tout le monde et la mapper sur le mpr #1. On initialise un mpr en asm avec l'instruction tam qui transfere la valeur du registre A vers le mpr spécifié en argument. Or la syntaxe est un peu spéciale. On n'indique pas directement la valeur du mpr mais 1 << numMpr. On a donc en pseudo-asm:

lda #(addr >> 13)
tam #(1 << numMpr)

En vrai ça donne:

lda #$F8
tam #$02

C'est bien beau tout ça, mais on a toujours notre 10eme octet de la bss à  initialiser.
La mpr 1 "pointe" donc vers le bloc (ou segment) de 8ko de la RAM contenant la zp, la pile, la bss (et le reste des 8ko). L'addresse logique est la concaténation du numéro de la mpr à  utiliser et de l'offset dans le bloc de 8ko pointé.

logicAddr = (numMpr << 13) | (addr & 8191)
logicAddr = (1 << 13) | (1F020A & 1FFF)
logicAddr = 2000 | 020A = 220A

Et donc en asm:

lda #32
sta $22A0

Tadam!

Tiens un petite question:
Si on n'accède qu'à  la zp et la pile, est-ce qu'on est obligé de mapper 1F0000 vu qu'on peut accéder directement à  ces zones (pha,pla,etc pour la pile. et inst $XX pour la zp) ?

Et heu, ya pas moyen de chopper les msgs du forum par mail ou par flux rss?
Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Message par xav »

Si on n'accède qu'à  la zp et la pile, est-ce qu'on est obligé de mapper 1F0000 vu qu'on peut accéder directement à  ces zones (pha,pla,etc pour la pile. et inst $XX pour la zp) ?
Je pense qu'il faudrait tester sur la béte...
J'oserais dire que l'on y est obligé, parce qu'il suffit de regarder le fonctionnement du 6280 pour comprendre qu'il n'y a pas de passe-droit: Toute operation sur la mémoire, zero page et pile incluse passe par les mpr... et seule mpr7 est correctement initialisé au démarrage...

Bonne question ça!
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Message par MooZ »

Je viens de faire un test rapidos, et apparement il faut bien mapper 1F0000 sur la mpr #1. J'ai mappé la rom de la hucard dessus pour voir et rien n'etait mis dans la zone mémoire 1F0000. J'ai fait le test avec mednafen. Mais comme tu l'as dit, il faudrait tester sur le monstre :)
J"ai codé le truc pour wla-dx histoire d'avoir le strict minimum.
code
linkfile
rom

Il faudrait que je relise le patent du cpu (erk!) pour voir si ils n'en parlent pas.
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

Merci mooz pour ces explications, c'est pas facile d'en trouver sur ce fameux adressage en plus en français.
J'avoue que la page de mindrec est assez bien faite, sais tu si cela a etait traduit du develo book assembler.
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Message par MooZ »

Je ne pense pas qu'il s'agisse d'une traduction directe du develo asm. Il doit plus s'agir d'une compilation des informations ayant circulées sur la tghack list . Mais en gros ca doit revenir au même, vu que certains membres de cette liste ont les develos books (asm et basic) et les docs du hu7. Et il ne faut pas oublier que les patents sont dispos sur le net (enfin étaient. Charles McDonald n'a pas encore fini la refonte de son site. On peut néanmoins les récupérer via archive.org).
Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Message par xav »

J'utile wla avec le Z80 depuis longtemps... Et je viens de percuter qu'on peut l'utiliser aussi avec le 6280 :oops:
Il faudrait que je relise le patent du cpu (erk!) pour voir si ils n'en parlent pas.
Comme tu dit, interressantes mais indigestes! :shock:
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

MooZ a écrit :
lda #32
sta $22A0
Euh c'est pas plutot sta $220A :roll:
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Message par MooZ »

C'était pour voir si vous suiviez ... erm :D
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

En tout cas je crois qu'apres toutes tes explications ça ne peut etre plus clair, sauf une ou deux incomprehention dans ta syntaxe que j'ai du mal à  comprendre, bref je vais encore t'embeter ;)
Dernière modification par peperocket le jeu. 14 déc. 2006 20:10, modifié 1 fois.
Avatar de l’utilisateur
SirG
Administrateur
Messages : 5089
Inscription : lun. 20 sept. 2004 20:39
Localisation : Dans un labyrinthe

Message par SirG »

Image
Justin Batable
maryla
Push Run Button!
Messages : 54
Inscription : lun. 01 janv. 2007 14:14

Message par maryla »

*pense tout haut* " ben didon je suis développeuse mais alors qu'est-ce qu'ils sont à  des annnées lumière !! " Franchement plus je lis les posts techniques plus je vous trouve vachement balèze, vous m'espentez !
Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Message par xav »

ben didon je suis développeuse mais alors qu'est-ce qu'ils sont à  des annnées lumière !! " Franchement plus je lis les posts techniques plus je vous trouve vachement balèze, vous m'espentez !
On t'éspente? Pécaïre toi t'es pas du nord tiens! :wink:

Le truc, c'est que le devellopement moderne tend à  s'éloigner du materiel, directx en est la preuve flagrante.
Ce n'est pas un tord, dans le monde actuel il faut travailler et produire vite.

Par contre sur une machine ancienne, il est hors de question d'utiliser ce genre d'artifice, sinon les jeux serais trop lent, aprés tout on a "que" 7Mhz pour faire tout tourné :lol: .
On est donc obligé de connaitre a fond le hardware de la machine, et d'utiliser l'assembleur ou (pour les pas courageux comme moi) au pire le C ( heureusement la nec est bien fournis pour ces 2 languages).
Répondre