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.
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 :
(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2025/07/24/20250724221036-Little_Rabbit-6502_memory_map_vector_area.png) (https://gamoovernet.pixhotel.fr/pics/v2/2025/07/24/20250724221036-Little_Rabbit-6502_memory_map_vector_area.png)
(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+
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