Adressage memoire PCE
Modérateurs : SirG, Redfield1, shubibiman, Laucops
- xav
- NECrophage
- Messages : 1159
- Inscription : mar. 05 juil. 2005 22:12
- Localisation : Le plus grand four solaire de France, Montpellier
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
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
- peperocket
- NECrophage
- Messages : 1555
- Inscription : lun. 23 mai 2005 00:17
- Localisation : Dans mes charentaises
- peperocket
- NECrophage
- Messages : 1555
- Inscription : lun. 23 mai 2005 00:17
- Localisation : Dans mes charentaises
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/
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/
- MooZ
- Administrateur
- Messages : 2090
- Inscription : jeu. 16 déc. 2004 14:25
- Contact :
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:
).
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?
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
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?
- xav
- NECrophage
- Messages : 1159
- Inscription : mar. 05 juil. 2005 22:12
- Localisation : Le plus grand four solaire de France, Montpellier
Je pense qu'il faudrait tester sur la béte...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) ?
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!
- MooZ
- Administrateur
- Messages : 2090
- Inscription : jeu. 16 déc. 2004 14:25
- Contact :
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.
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.
- peperocket
- NECrophage
- Messages : 1555
- Inscription : lun. 23 mai 2005 00:17
- Localisation : Dans mes charentaises
- MooZ
- Administrateur
- Messages : 2090
- Inscription : jeu. 16 déc. 2004 14:25
- Contact :
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).
- xav
- NECrophage
- Messages : 1159
- Inscription : mar. 05 juil. 2005 22:12
- Localisation : Le plus grand four solaire de France, Montpellier
- peperocket
- NECrophage
- Messages : 1555
- Inscription : lun. 23 mai 2005 00:17
- Localisation : Dans mes charentaises
- MooZ
- Administrateur
- Messages : 2090
- Inscription : jeu. 16 déc. 2004 14:25
- Contact :
- peperocket
- NECrophage
- Messages : 1555
- Inscription : lun. 23 mai 2005 00:17
- Localisation : Dans mes charentaises
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.
- xav
- NECrophage
- Messages : 1159
- Inscription : mar. 05 juil. 2005 22:12
- Localisation : Le plus grand four solaire de France, Montpellier
On t'éspente? Pécaïre toi t'es pas du nord tiens!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 !
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é
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).


