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.

L'EEPROM connectée au 6502

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.