Questo progetto nasce dalla necessità di riparare il mio Apple ][e al quale si guastò il controller tastiera implementato con un vecchio microcontrollore programmabile della General Instruments, l'AY-5-3600 PRO. Vista la difficoltà nel reperire questo tipo di chip, e vista comunque la necessità di programmarlo per la funzione specifica nell'Apple ][e, ho pensato di sostituirlo con un microcontrollore più moderno e facilmente reperibile. La scelta è ricaduta sul PIC16F877A della Microchip (marchio che oltretutto acquisì la General Instruments e i suoi primi PIC) Lo schema è molto semplice e consente l'installazione sulla scheda madre dell'Apple ][e senza effettuare alcuna modifica, direttamente nello zoccolo del controller originale. L'AY-5-3600 dispone di vari pin di input/output e il suo funzionamento è strutturato in questo modo: I pin dal 33 al 40 sono otto uscite collegate rispettivamente alle righe X7--X0 della tastiera. I pin dal 17 al 26 sono dieci ingressi collegati alle colonne Y0--Y9 della tastiera. I pin 28 e 29 sono collegati ai tasti control e shift indipendentemente dal resto degli altri tasti. I pin dal 6 al 14 sono collegati (non in ordine) a nove uscite dove viene presentato il codice univoco che identifica il tasto premuto (attenzione, non il codice ascii). Infine ci sono due pin, il 5 e il 16, che informano il chip custom IOU (Input Output Unit) che un tasto è stato premuto (linea AKD, pin 5) e che il dato in uscita è pronto (linea KSTRD, pin 16) I pin 1, 2 e 3 sono collegati a un generatore di clock di tipo RC che ho riutilizzato con il PIC per evitare di aggiungere un quarzo. Durante il normale funzionamento dell'AY-5-3600, la matrice della tastiera viene scansionata tramite le uscite X0--X7; in particolare queste uscite sono tutte a livello alto tranne una che ciclicamente viene posta a zero. Quando una delle otto uscite è a zero, se viene premuto un tasto corrispondente a quella riga succede che uno dei pin di ingresso Y0--Y9, corrispondente all'incrocio con la riga X attiva, viene posto a zero.  In questo caso viene rilevato un tasto premuto e il corrispondente codice è posto sulle uscite, dopo averlo eventualmente combinato con i tasti Shift e Control. Questo codice in uscita rappresenta l'indirizzo per la Keyboard Rom sulla scheda madre, la quale fornisce il codice ASCII corrispondente al tasto premuto secondo la mappatura della tastiera in uso (italiana, inglese, ecc..) Questo sistema consente di aggiornare la mappatura della tastiera semplicemente cambiando il contenuto della Keyboard ROM, mentre il controller della tastiera rimane lo stesso. Nel caso specifico dell'Apple ][e, la Keyboard ROM dispone di due banchi separati selezionabili con il deviatore sotto il computer, e contengono i codici per la tastiera italiana o internazionale. Inoltre, ciascuno dei due banchi principali contiene due sotto banchi selezionati dal tasto indipendente "Caps Lock", in modo che a parità di tasto premuto, venga inviato il codice per la lettera maiuscola o minuscola a seconda dei casi e a prescindere dal tasto Shift, che invece agisce anche sui tasti numerici e di punteggiatura. Detto questo è semplice riportare il tutto all'interno di un PIC per svolgere questa funzione di scansione della tastiera. L'unica differenza è che per comodità di progettazione hardware e di programmazione, le righe X0--X7 le ho usate come ingressi e la scansione avviene per colonne sulle linee Y0--Y9. Questo perché avendo un ingresso ad 8 bit con resistenze di pullup integrate (il PortB del PIC) è più semplice gestire l'input (è un byte esatto invece che 10 bit del sistema originale) e non serve montare otto resistenze di pullup sulla schedina. Il resto lo fa il software. I diodi da D1 a D10 servono per evitare corto circuiti fra le uscite del PIC nel caso fossero premuti simultaneamente due tasti appartenenti a colonne diverse.  I jumper SJ1 e SJ2 li ho previsti semplicemente perché avanzavano due pin del PIC, e sono configurati come ingressi. Per casi specifici comunque possono anche essere usati come uscite. Il jumper SJ1, normalmente chiuso, se aperto disabilita la schermata di benvenuto visualizzata un'unica volta all'accensione della macchina e solo in modalità basic. Il secondo, SJ2, è normalmente aperto e la sua funzione è riservata per eventuali usi futuri. Il clock del PIC come detto è ricavato dalla rete RC già presente sulla scheda madre e facente capo ai pin 1, 2 e 3 dello zoccolo. con i valori attuali il clock si aggira sui 33KHz, ma se servisse aumentarlo ho predisposto una resistenza R4 "clock speedup" che va in parallelo alla resistenza sulla scheda madre. Qui sotto e’ possibile scaricare il progettino: (Aggiornato il 13-Nov-2012)   30-Ottobre-2012