Billet #003 - 4 juin 2026
Installation permanente de l'EEPROM et connexion au 6502
LâEEPROM est programmĂ©e et son fonctionnement avec le 6502 est validĂ©. Lâobjectif dâaujourdâhui est de la connecter de façon semi-permanente au 6502 sur la mĂȘme breadboard et de cĂąbler proprement toutes les lignes dâadresse et de donnĂ©es. Mais avant ça il faut revoir la programmation car cette fois les lignes dâadresses seront cĂąblĂ©es correctement et le CPU ne retrouvera donc pas les donnĂ©es que jâai programmĂ© prĂ©cĂ©dement en utilisant les mauvaises lignes dâadresse. Il y a aussi le fait quâau dĂ©marrage le CPU va lire le vecteur reset situĂ© aux adresses 0xFFFC et 0xFFFD pour savoir Ă partir de quelle adresse il doit commencer Ă exĂ©cuter les instructions. Avec 4 lignes dâadresse on pouvait placer le vecteur reset aux adresses 0x000C et 0x000D, mais avec un adressage complet ça ne fonctionnera pas.
La ROM utilise 15 lignes dâadresse (32k adressable) alors que le CPU en utilise 16 (64k adressable). Pour lâinstant je connecte les 15 premiĂšres lignes et je laisse la 16e du CPU non connectĂ©e. Ainsi quand le CPU demande lâadresse 0xFFFC, ça correspondra Ă lâadresse 0x7FFC dans la ROM. Câest donc lĂ quâil faut placer le vecteur reset. On peut ensuite placer le programme oĂč on veut dans la mĂ©moire, tant quâon renseigne lâadresse correspondante dans le vecteur reset.
Je dĂ©cide de commencer par Ă©crire le programme Ă lâadresse 0x0000, et dâĂ©crire ensuite le vecteur reset. Je reprends mon montage de programmation et je connecte toutes les lignes dâadresse Ă 0 en laissant cette fois les 4 vraies lignes de poids faible ajustables. Je lance la programmation avec le code Arduino utilisĂ© prĂ©cĂ©demment.
Pour Ă©crire le vecteur reset, je dĂ©cide par soucis de simplicitĂ© dâĂ©crire Ă nouveau tout le programme Ă lâadresse 0x7FF0, ce qui permet de faire exactement la mĂȘme manip que prĂ©cĂ©demment mais cette fois avec les lignes dâadresse Ă 1. Le vecteur reset Ă©tant 00 00, ça devrait fonctionner, mais pour rendre les choses intĂ©ressantes je dĂ©cide de modifier la valeur et de mettre 0xFFF0, ce qui aura pour effet dâexĂ©cuter le programme situĂ© en 0x7FF0 et non en 0x0000.
Résumé des écritures dans la ROM :
| Addr | Données | Commentaire |
|---|---|---|
0x0000 |
AD 09 00 |
LDA $0009 |
0x0003 |
AD 0A 00 |
LDA $000A |
0x0006 |
6D 0B 00 |
ADC $000B |
0x0009 |
28 |
 |
0x000A |
02 |
 |
0x000B |
0A |
 |
0x000C |
00 |
 |
0x000D |
00 |
 |
0x7FF0 |
AD 09 00 |
LDA $0009 |
0x7FF3 |
AD 0A 00 |
LDA $000A |
0x7FF6 |
6D 0B 00 |
ADC $000B |
0x7FF9 |
28 |
 |
0x7FFA |
02 |
 |
0x7FFB |
0A |
 |
0x7FFC |
F0 |
 |
0x7FFD |
FF |
 |
La ROM Ă©tant prĂȘte, je lâinstalle sur la breadboard Ă cĂŽtĂ© du 6502. Pour lâinstant je force /CE Ă 0, /OE Ă 0 et /WE Ă 1, la ROM sera toujours active et ne fonctionnera quâen Ă©criture. Je connecte ensuite les lignes dâadresse et les lignes de donnĂ©es. Jâessaie de faire quelque chose de propre, en mâinspirant des techniques de Ben Eater.
Pour lâobservation jâutilise des nappes pour les bus, câest plus propre que les fils volants. Comme prĂ©cĂ©demment câest lâArduino qui fait la clock, et jâobserve uniquement les 4 LSB de lâadresse (les vrais maintenant).
Jâalimente, je fais un reset du CPU, et voici le rĂ©sultat :
| Adresse théorique | Adresse observée | Data |
|---|---|---|
0xFFFc |
0xc |
f0 |
0xFFFd |
0xd |
ff |
0x7FF0 |
0x0 |
ad |
0x7FF1 |
0x1 |
09 |
0x7FF2 |
0x2 |
00 |
0x0009 |
0x9 |
28 |
0x7FF3 |
0x3 |
ad |
0x7FF4 |
0x4 |
0a |
0x7FF5 |
0x5 |
00 |
0x000a |
0xa |
02 |
0x7FF6 |
0x6 |
6d |
0x7FF7 |
0x7 |
0b |
0x7FF8 |
0x8 |
00 |
0x000b |
0xb |
0a |
Tout fonctionne comme prĂ©vu đ
La suite
Le systĂšme est dĂ©sormais capable de lire des programmes abritrairement longs. Encore faut-il ĂȘtre capable de programmer la ROM sur plus que 16 octets. Jâai quelques idĂ©es pour ça. Lâobjectif ensuite sera dâutiliser une puce dâentrĂ©es-sorties pour pouvoir connecter des pĂ©riphĂ©riques et dâavoir enfin des rĂ©sultats observables.
J'utilise des outils à base d'IA générative pour rédiger et/ou traduire le contenu de ce site. J'utilise l'IA comme un outil de productivité et d'inspiration, je m'assure toujours que les textes finaux reflÚtent fidÚlement ma voix.