# Personal computer/Appendici

Personal computer
* Storia dei calcolatoriPersonal computer/Storia
* Architettura del calcolatorePersonal computer/Architettura
** CPUPersonal computer/Architettura/CPU
** MemoriaPersonal computer/Architettura/Memoria
** Input/OutputPersonal computer/Architettura/IO
* Linguaggio MacchinaPersonal computer/Linguaggio Macchina
** DLXPersonal computer/Linguaggio Macchina/DLX
*** Operazioni DLXPersonal computer/Linguaggio Macchina/DLX/Operazioni
*** DLX sequenzialePersonal computer/Linguaggio Macchina/DLX/DLX_sequenziale
*** DLX in pipelinePersonal computer/Linguaggio Macchina/DLX/DLX_pipeline
** 8086-8088Personal computer/Linguaggio Macchina/8086
* Mapping di Memorie ed InterfaccePersonal computer/Mapping
** Integrati NotevoliPersonal computer/Mapping#Caratteristiche_e_funzionamento_degli_integrati_notevoli
*** DriverPersonal computer/Mapping/Driver
*** CPUPersonal computer/Mapping/CPU
*** Memoria PrincipalePersonal computer/Mapping/Memorie
*** Interfacce I/OPersonal computer/Mapping/Interfacce
** Gestione delle interfacce tramite programmaPersonal computer/Mapping#Gestione_delle_interfacce_tramite_programma
* Standard alla base di un personal computerPersonal computer/Standard
* Appendici e RiassuntoPersonal computer/Appendici
Modifica il sommario

### Arithmetic and Logic Unit

È una rete combinatoria in grado di eseguire diverse operazioni di tipo aritmetico o logico.
* Schema logico dell'ALU

### Riassunto
#### Componenti notevoli
##### EPROM

Una Eprom è un dispositivo di memoria statica che deriva il suo nome dalle sue caratteristiche principali: Eraseable Programmable Read Only Memory. Ovvero Cancellabile, programmabile, leggibile. La programmazione di una EPROM avveniva infatti una sola volta, e comunque non era così facile aggiornare il programma contenuto in una EPROM, poiché la cancellazione avveniva solo tramite l'uso di una luce a raggi ultravioletti. Oggi le cose sono molto diverse. Non esistono più solo EPROM ma anche EEPROM ovvero Electrically Eraseable PROM, che sarebbero EPROM che possono essere cancellate e riprogrammate attraverso impulsi elettrici inviati ad alcune porte del chip.
Caratteristiche delle EPROM:
* La capacità va a multipli di 2: 32k, 64k, 128k, 256k, ...
* Le sigle sono del tipo 27xxx, con xxx indicante le dimensioni in Kbits
Porte del chip:
* GND - porta a massa
* VCC - porta da connettere all'alimentazione
* A0 .. A16 - porte degli ingressi
* D0 .. D7 - porte delle uscite
* CE* - Chip Enable, porta che permette di accendere il chip solo quando serve.
* OE* - Output Enable, porta che permette ai dati di essere letti
* PGM* - Porta che consente ad un programmatore di inserire i dati nella EPROM. Su questa porta va applicato un segnale logico alto o basso (questo varia a seconda delle caratteristiche circuitali impostate dal costruttore).Questo renderà programmabili tutte le altre porte.

##### Ram

La Ram, Random Access Memory, è il dispositivo di memoria rapida del calcolatore. Al contrario della EPROM deve essere sia leggibile che, soprattutto, scrivibile e questo è necessario che avvenga in tempi molto ristretti. Esistono due tipi di RAM costruiti in modo completamente diverso: Le SRAM e le DRAM. La SRAM, ovvero Static RAM, è composta da Flip-Flop che mantengono memorizzati i dati, con un tempo di accesso minimo ma con capacità minore rispetto alle DRAM. Queste ultime sono composte da transistor di tipo MOS. La capacità aumenta, ma la velocità di accesso è minore.
La struttura logica interna di una RAM è comunque comune ad entrambi i tipi di RAM. L'aspetto fondamentale è nel doppio uso del bus di dati che in caso di scrittura porta il dato da scrivere, mentre in caso di lettura porta il dato letto. Questo attraverso un intelligente uso di un buffer tri-state.
Caratteristiche della RAM
* Capacità a multipli di 4
* Sigla: 62xxx
Porte del chip:
* GND - a massa
* VCC - Tensione di alimentazione
* CE* - Chip Enable - accensione del chip di RAM
* OE* - Output Enable - va a zero nel momento della lettura
* WE* - Write Enable - va a zero nel momento della scrittura
* A0 .. A16 - Indicatori della posizione della casella di memoria
* I/O0 .. I/O7 - Dati in uscita o ingresso

##### 74xx244

Circuito integrato consistente in un insieme di 2 gruppi di three-state buffer da quattro bit ciascuno. Ogni gruppo è comandato indipendentemente dall'altro.
Porte dell'integrato:
* ENx* - abilita il gruppo x di three-state buffer
* xA1 .. xA4 - Bit in ingresso da abilitare o portare a stato di alta impedenza
* xY1 .. xY4 - output del buffer three-state

##### 74xx245

Un integrato come il precedente è utile, ma spesso può essere necessario abilitare alternativamente sullo stesso canale sia ingresso che uscita. Per minimizzare lo spazio necessario per un tal genere di esigenza esiste l'integrato 245. Quest'ultimo si compone di una coppia di three-state buffer in direzioni opposte aperti alternativamente attraverso un comando DIR. Una struttura come questa è detta transceiver. La struttura logica è per il resto sostanzialmente identica alla precedente.

#### DLX
###### Formato operazioni

Ogni OpCode è composto di 6 bit, ogni indirizzo di 5, mentre i restanti bit sono eventualmente per offset o altri tipi di input. Le tre grandi famiglie di comandi sono:
Formato I: È quello utilizzato per ogni operazione con operatori immediati. Come si nota l'offset è di soli 16 bit, il che significa che non si può passare come argomento direttamente un dato a 32 bit, bensì bisogna suddividerlo in due passaggi con in mezzo uno shift di 16 posizioni.
Formato R: è il formato delle operazioni fra registri. Gli 11 bit finali vengono utilizzati per rendere più specifiche alcune operazioni (ricordiamo che essendoci solo 6 bit per le operazioni, il numero massimo di queste è $2^{6}=64$)
Formato J: Quest'ultimo è il formato dei salti condizionati o meno.

###### Operazioni

* Trasferimenti di dati
** LB, LBU, SB Load byte, load byte unsigned, store byte
** LH, LHU, SH Load halfword, load halfword unsigned, store halfword
** LW, SW Load word, store word (a/da registri integer)
** LF, LD, SF, SD Load SP float, load DP float, store SP float, store DP float (SP - single precision, DP - double precision)
** MOVI2S, MOVS2I Move from/to GPR to/from a special register
** MOVF, MOVD Copy one floating-point register or a DP pair to another register or pair
** MOVFP2I, MOVI2FP Move 32 bits from/to FP tegister to/from integer registers
* Aritmetica/Logica
** ADD, ADDI, ADDU, ADDUI Add, add immediate (tutti gli immediati sono a 16 bit); signed and unsigned
** SUB, SUBI, SUBU, SUBUI Subtract, subtract immediate; signed and unsigned
** MULT, MULTU, DIV, DIVU Multiply and divide, signed and unsigned; Gli operandi devono essere registri Floating-point; Tutte le operazioni richiedono valori a 32 bit e danno come risultato valori a 32 bit.
** AND, ANDI And, And immediate
** OR, ORI, XOP, XOPI Or, or immediate, exclusive or, exclusive or immediate
** LHI Load high immediate - carica nella parte alta del registro il dato immediato
** SLL, SRL, SRA, SLLI, SRLI, SRAI Shifts: sia immediato(S__I) che variabile (S__); gli shift sono Shift Left Logical, Right Logical, Right Arithmetic
** S__, S__I Set condizionati: "__" può essere LT, GT, LE, GE, EQ, NE
* Controlli
** BEQZ, BNEZ Branch GPR equal/not equal to zero; 16-bit offset from PC
** BFPT, BFPF Test comparison bit in the FP status register and branch; 16-bit offset from PC
** J, JR Jumps: 26-bit offset from PC(J) or target in register(JR)
** JAL, JALR Jump and link: save PC+4 to R31, target is PC-relative(JAL) ot a register(JALR)
** TRAP Transfer to operating system at a vectored address
** RFE Return to user code From an Fxception; restore user code
* Floating point
** ADDD, ADDF Add DP, numeri SP
** SUBD, SUBF Subtract DP, numeri SP
** MULTD, MULTF Multiply DP, SP floating point
** DIVD, DIVF Divide DP, SP floating point
** CVTF2D, CVTF2I, CVTD2F,
** CVTD2I, CVTI2F, CVTI2D Istruzioni di Conversione: CVTx2y converte dal tipo x al tipo y, dove x e y sono I(Integer), D(Double precision), o F(Single precision). Entrambi gli operandi sono nel registro FP
** __D, __F confronti DP e SP: "__" può essere LT, GT, LE, GE, EQ, NE; impostare il bit di paragone nel registro FP.