Page 2 sur 3

Publié : mar. 05 déc. 2006 01:18
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

Publié : mar. 05 déc. 2006 08:19
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

Publié : jeu. 07 déc. 2006 00:31
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/

Publié : lun. 11 déc. 2006 15:04
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?

Publié : lun. 11 déc. 2006 18:03
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!

Publié : mar. 12 déc. 2006 17:55
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.

Publié : mer. 13 déc. 2006 18:50
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.

Publié : mer. 13 déc. 2006 19:50
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).

Publié : mer. 13 déc. 2006 20:55
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:

Publié : jeu. 14 déc. 2006 00:31
par peperocket
MooZ a écrit :
lda #32
sta $22A0
Euh c'est pas plutot sta $220A :roll:

Publié : jeu. 14 déc. 2006 10:54
par MooZ
C'était pour voir si vous suiviez ... erm :D

Publié : jeu. 14 déc. 2006 12:08
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 ;)

Publié : jeu. 14 déc. 2006 19:54
par SirG
Image

Publié : dim. 14 janv. 2007 20:27
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 !

Publié : jeu. 18 janv. 2007 13:23
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).