Gamoover

[move]Pour vous aussi la chipo ne sera jamais qu'un bootleg de merguez (c)sushy18 ? Alors soyez les bienvenus sur Gamoover ! [/move]

Besoin d'aide bus d'adressage du 6502

Démarré par rafale2, Mercredi 23 Juillet 2025, 20:25:33 PM

rafale2

Bonjour à tous, je répare depuis quelques temps mes propres cartes CPU system80 sans jusqu'ici me soucier des échanges entre le 6502 et les PROMs et je souhaitais me perfectionner dans le système d'adressage du 6502. D'après mes lectures, après avoir reçu son signal de RESET, le 6502 se dirige automatiquement vers une adresse appelée "vecteur reset" dont l'adresse serait $fffc et $fffd. En consultant le .bin d'un U3 d'un system 80, cette adresse pointe sur $2000, soit l'adresse $000 de U2. jusqu'ici tout me paraissait clair et logique. Mais en lisant les adresses du vecteur Reset de U3 d'un system80A, je lis une redirection à l'adresse $3ff7... je pensais trouver $6000. Est ce que j'interprète mal l'adresse du vecteur Reset?...ou je me trompe complètement ?...je bloque. Merci par avance de votre aide pour les plus chevronnés.

Little_Rabbit

Salut,

Je ne connais pas les System 80 de Gottlieb, donc je ne pourrai pas t'aider, mais je peux te confirmer comment fonctionne un 6502 ;).

Disposerais-tu des "memory map" des System 80 et System 80A qu'on y comprenne un peu plus quelque chose quand tu nous parles de U2/U3 ? :)

Dans l'espace mémoire d'un 6502, tu as en effet 3 vecteurs, pour respectivement :

- les IRQ (interruptions masquables, matérielles ou logicielle via l'instruction BRK)
- le RESET (activé par le circuit RESET de la carte CPU)
- les NMI (les interruptions non masquable)

Cette image illustre le principe :



(image trouvée sur le net, perso je préfère mettre les adresses $0000, $0001 etc. tout en haut, les $FFFC, $FFFD, $FFFE et $FFFF tout en bas...)

Ensuite, sur un 6502, les adresses 16 bits, qui tiennent donc sur deux octets consécutifs en mémoire, sont stockées dans l'ordre "octet de poids faible", puis "octet de poids fort" (ce qu'on appelle "Little-endian", contrairement au "Big-endian" d'un 6809 par exemple, où l'on a poids fort puis poids faible).

Ainsi, prenons par exemple l'instruction :

     STA $0370   ;stocke le contenu de l'accumulateur en $0370

se traduira en mémoire par la séquence :

     8D  70  03

Prenons l'hypothèse où cette instruction se trouve en mémoire en $F100, voici ce que contient la mémoire :

$F100 =>  8D    opcode de l'instruction STA $xxxx
$F101 =>  70    poids faible de l'adresse destination du STA
$F102 =>  03    poids fort de l'adresse destination du STA

Je rappelle cela juste pour être sûr que tu lis bien les adresses des vecteurs RESET dans le bon ordre ;).

Vecteur RESET d'un 6502 :

$FFFC => poids faible de l'adresse de la routine de RESET
$FFFD => poids fort de l'adresse de la routine de RESET

Exemple :

$FFFC => $62
$FFFD => $FA

=> lors d'un RESET, le CPU exécutera la routine stockée en ROM à l'adresse $FA62


A+
Recherche bornes dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Gottlieb des années 80 (Spirit, Amazon Hunt, ...), Baby Pac Man. Divers :  Ice Cold Beer => Trois fois rien quoi ! :D
Ma séance sur le divan : c'est grave Docteur ? :-\
Ma gaming room, ma storage room

rafale2

merci de ton retour.
Je pense avoir trouvé moi -même.
Sur la prom U3 (2332) des system80A, le vecteur reset indique $3ff7. il est donc demandé au 6502 de se diriger à l'adresse $3ff7, cela correspond à l'adresse $ff7 de U3 car il n'a que 12 bus d'adresses.
a l'adresse $ff7 ont trouve les chiffres hexadécimaux suivants : 4C 00 20. En assembleur "4C" veut dire "Jump" soit sauter à l'adresse suivante : 00 (poids faible) 20 (poids fort) soit $2000.
Le 6502 va donc bien commencer son programme à l'adresse $2000 soit l'adresse $000 de U2 (2332) car le bus d'adresse A12 permet de permuter entre U2 et U3.
Si j'ai fait une erreur dites le moi. Merci