1. Macro Code: il programma nella RAM
Una macroistruzione esprime un’operazione completa.
Il Macrocode è il programma contenuto nella RAM: una sequenza di macroistruzioni come TAKE, ADD e SAVE, ciascuna con una funzione specifica.

| Icona | Funzione | Quando usarla |
|---|---|---|
| Azzera la RAM. | Per iniziare un programma nuovo, dopo aver salvato quello precedente. | |
| Apre un file della memoria RAM. | Per caricare un programma salvato. | |
| Salva la RAM. | Per conservare dati e istruzioni del programma. | |
| Esegue un macro passo. | Per completare una macroistruzione e osservarne il risultato. | |
| Avvia il programma automaticamente. | Per proseguire senza un clic per ogni istruzione. | |
| Regola la velocità dell’esecuzione automatica. | Per rendere più facile seguire i cambiamenti. | |
| Interrompe l’esecuzione. | Per fermarsi a osservare lo stato della macchina. | |
| Azzera PC e gli altri registri del processore. | Per ripartire; verifica anche i dati RAM prima di una nuova prova. | |
| Mostra o nasconde i dettagli dell’unità di controllo e la barra Micro Code. | Per osservare registri, contatore e sequenze interne. |
Reset e nuova RAM sono diversi: Reset agisce sui registri; il foglio con la stella azzera la memoria. Il triangolo singolo è il macro passo; i due triangoli avviano l’automatismo.
2. Da dove inizia una macroistruzione?
Prima si preleva il comando, poi lo si interpreta e si esegue la sua operazione.
Il punto di partenza è il Program Counter (PC, contatore del programma), che conserva l’indirizzo della cella RAM da cui leggere il comando. Dopo Reset, PC = 000: il prelievo parte quindi dalla cella 000.
AB — Address Bus è il bus degli indirizzi: indica dove leggere. DB — Data Bus è il bus dei dati: trasporta il contenuto. INS — Instruction Register conserva l’istruzione prelevata.
| Fase | Operazione in Johnny | Che cosa avviene |
|---|---|---|
| 1. Selezione | pc->ab | L’indirizzo conservato in PC viene copiato su AB. La RAM seleziona quella cella. |
| 2. Lettura | ram->db | Il contenuto della cella selezionata viene copiato nel bus dei dati. In questa fase è il codice del comando. |
| 3. Caricamento del comando | db->ins | Il registro istruzione riceve il codice operativo e l’operando. |
| 4. Scelta della sequenza | ins->mc | Il codice operativo seleziona la sequenza interna che realizza il comando. MC è il Microcode Counter, contatore del microcodice. |
| 5. Esecuzione | Dipende dalla macroistruzione | TAKE carica un dato, ADD lo somma, SAVE scrive un risultato; ciascun comando usa la propria sequenza. |
| 6. Continuazione | Aggiornamento di PC e ritorno al prelievo | Nei normali comandi sequenziali PC avanza con pc++ e mc:=0 riporta il controllo al prelievo. Salti e condizioni possono cambiare l’indirizzo successivo; HLT arresta il programma. |
Non serve un comando ab->ram: AB indica la posizione, non contiene il dato da scrivere. Per leggere si usa ram->db; per scrivere si usa db->ram, sempre nella cella indicata da AB.
Due letture diverse: il comando e il suo dato
Se RAM[000] contiene TAKE 005 e RAM[005] contiene 7, il prelievo legge prima la cella 000: DB riceve 01 005. Poi l’esecuzione seleziona 005 con ins->ab e legge di nuovo la RAM con ram->db: questa volta DB riceve 00 007.
La selezione di una cella e la lettura sono due azioni distinte. Cambiare AB non aggiorna automaticamente DB. I dettagli delle operazioni interne sono sviluppati nella pagina Microistruzioni e negli esempi TAKE e ADD.
3. Le macroistruzioni
La lettera a rappresenta l’indirizzo operando.
| Codice Hi | Macroistruzione | Significato |
|---|---|---|
| 01 | TAKE a | Copia RAM[a] in ACC. |
| 02 | ADD a | Somma RAM[a] ad ACC. |
| 03 | SUB a | Sottrae RAM[a] da ACC. |
| 04 | SAVE a | Copia ACC in RAM[a]. |
| 05 | JMP a | Riprende il programma dalla cella a. |
| 06 | TST a | Se RAM[a] è zero, salta l’istruzione successiva; altrimenti prosegue normalmente. |
| 07 | INC a | Incrementa il contenuto di RAM[a]. |
| 08 | DEC a | Decrementa il contenuto di RAM[a]. |
| 09 | NULL a | Imposta RAM[a] a zero. |
| 10 | HLT 000 | Termina l’esecuzione; l’operando non indica un dato da caricare. |