Riferimento Istruzioni 680x0

La famiglia Motorola 68000 fu progettata per una forte compatibilità object-code verso l'alto, ma la compatibilità non è assoluta. Esempi includono il cambio di privilegio in MOVE from SR sul MC68010, la rimozione di CALLM/RTM dopo il MC68020, i cambiamenti nel modello di programmazione MMU, e le istruzioni del MC68060 che richiedono supporto software guidato dalle eccezioni. Questo articolo è la matrice di riferimento principale che incrocia ogni istruzione 680x0 contro ciascuna generazione di CPU. Usala per determinare quale opcode è disponibile su quale target quando si scrive assembly per la famiglia Amiga (A500/A1000 = 68000; A1200 = 68020; A3000/A4000 = 68030/68040).

Questo articolo è popolato progressivamente dai Manuali Ufficiali Motorola (MC68000UM, MC68010UM, MC68020UM, MC68030UM, MC68040UM, MC68060UM). La colonna 68000 è la fonte di verità (verificata contro MC68000UM Table 2-2, Instruction Set Summary). La colonna 68020 è verificata contro MC68020UM Table 1-2 (Instruction Set). La colonna 68030 è verificata contro MC68030UM Table 1-2 (Instruction Set) + Section 1.7 (MMU). La colonna 68040 è verificata contro MC68040UM Table 1-4. La colonna 68060 è verificata contro MC68060UM Table 1-3, Appendix C.2, e Section 6.5.1. Le altre colonne CPU sono compilate incrementalmente man mano che ciascun manuale di riferimento viene processato.

Indice

Come leggere la tabella

  • ✅ — native: l'istruzione è implementata nel silicio della CPU
  • ⚠ — trap/software-support: l'encoding è riconosciuto come caso di compatibilità ma non è completato in hardware; la CPU solleva l'eccezione documentata e il software può emularla se sono installati il pacchetto di supporto/handler richiesti
  • ❌ — unsupported: l'istruzione non fa parte dell'ISA di questa CPU
  • ❓ — da confermare contro il manuale ufficiale (manuale non ancora processato)
  • italics — l'istruzione esiste con semantica ristretta (es. solo supervisore, dipendente dalla modalità, rimossa/sostituita su una CPU successiva)

Matrice istruzioni 680x0

La matrice qui sotto incrocia le istruzioni documentate contro ciascuna generazione di CPU. ✅ = native, ⚠ = richiede il percorso di eccezione/supporto-software documentato, ❌ = non supportata/non parte dell'ISA implementata da quel processore, ❓ = non ancora verificata. La colonna 68060 Pipe si applica solo al 68060 e indica quale Operand Execution Pipeline (per MC68060UM §10, Superscalar Classification):

  • pOEP-only — OEP primaria, blocca la secondaria (no dual-issue)
  • pOEP | sOEP — idonea per dual-issue (dispatch parallelo in entrambe le pipeline)
  • pOEP-until-last — esegue su pOEP ma blocca la sOEP fino al completamento
  • pOEP-but-allows-sOEP — tipicamente FPU (esecuzione integer parallela consentita)
  • Per 68000/68010/68020/68030/68040: la colonna pipe è (nessun superscalare)

Vedi Conteggi cicli di clock sotto per i tempi di esecuzione per CPU.

Movimento dati

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
EXG Scambia registri pOEP-only
LEA Carica indirizzo effettivo pOEP | sOEP
LINK Collegamento stack pOEP-until-last
MOVE Sposta (R→R base) pOEP | sOEP
MOVEA Sposta indirizzo pOEP | sOEP
MOVE from CCR Leggi CCR (68010+) pOEP-only
MOVE to CCR Scrivi CCR pOEP | sOEP
MOVE from SR Leggi SR (privilegiata dal 68010+) ✅* pOEP-only
MOVE to SR Scrivi SR (supervisore) pOEP-only
MOVE USP Sposta puntatore stack utente (supervisore) pOEP-only
MOVEC Sposta registro di controllo (supervisore) pOEP-only
MOVEM Sposta registri multipli pOEP-only
MOVEP Sposta dati periferici (emulata)
MOVEQ Sposta rapido (immediato) pOEP | sOEP
MOVES Sposta con function code alternato (supervisore) pOEP-only
MOVE16 Sposta blocco 16 byte (allineato a 16 byte; forme con postincremento registro e absolute-long) pOEP-only
PEA Salva indirizzo effettivo sullo stack pOEP-only
SWAP Scambia metà registro pOEP | sOEP
UNLK Scollega stack pOEP-only

Aritmetica interi

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
ABCD Addizione decimale con extend pOEP-only
ADD Addizione binaria pOEP | sOEP
ADDA Addizione indirizzo pOEP | sOEP
ADDI Addizione immediata pOEP | sOEP
ADDQ Addizione rapida pOEP | sOEP
ADDX Addizione con extend pOEP-only
CLR Azzera operando pOEP | sOEP
CMP Confronto pOEP | sOEP
CMPA Confronto indirizzo pOEP | sOEP
CMPI Confronto immediato pOEP | sOEP
CMPM Confronto memoria pOEP | sOEP
CMP2 Confronta contro limiti, setta cc (68020+; emulata su 68060) (emulata)
DIVS.W Divisione con segno 32÷16→16r:16q pOEP-only
DIVS.L Divisione con segno 32÷32→32q pOEP-only
DIVSL.L Divisione con segno 32÷32→32r:32q (output 64 bit, emulata su 68060) (emulata)
DIVU.W Divisione senza segno 32÷16→16r:16q pOEP-only
DIVU.L Divisione senza segno 32÷32→32q pOEP-only
DIVUL.L Divisione senza segno 32÷32→32r:32q (output 64 bit, emulata su 68060) (emulata)
EXT.W Estensione segno byte→word pOEP | sOEP
EXT.L Estensione segno word→long pOEP | sOEP
EXTB.L Estensione segno byte→long pOEP | sOEP
MULS.W Moltiplicazione con segno 16×16→32 pOEP-only
MULS.L Moltiplicazione con segno 32×32→32 pOEP-only
MULS.L (wide) Moltiplicazione con segno 32×32→64 (output 64 bit, emulata su 68060) (emulata)
MULU.W Moltiplicazione senza segno 16×16→32 pOEP-only
MULU.L Moltiplicazione senza segno 32×32→32 pOEP-only
MULU.L (wide) Moltiplicazione senza segno 32×32→64 (output 64 bit, emulata su 68060) (emulata)
NBCD Negazione decimale con extend pOEP-only
NEG Negazione pOEP | sOEP
NEGX Negazione con extend pOEP-only
PACK Impacca BCD (68020+; nativa su 68060) pOEP-only
SBCD Sottrazione decimale con extend pOEP-only
SUB Sottrazione binaria pOEP | sOEP
SUBA Sottrazione indirizzo pOEP | sOEP
SUBI Sottrazione immediata pOEP | sOEP
SUBQ Sottrazione rapida pOEP | sOEP
SUBX Sottrazione con extend pOEP-only
TAS Test e set pOEP-only
TST Test pOEP | sOEP
UNPK Spacca BCD (68020+; nativa su 68060) pOEP-only

Logiche e bit-field

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
AND AND logico pOEP | sOEP
ANDI AND immediato pOEP | sOEP
ANDI to CCR AND immediato a CCR pOEP-only
ANDI to SR AND immediato a SR (supervisore) pOEP-only
BFCHG Test bit field e cambia (68020+) pOEP-only
BFCLR Test bit field e azzera (68020+) pOEP-only
BFEXTS Estrai bit field con segno (68020+) pOEP-only
BFEXTU Estrai bit field senza segno (68020+) pOEP-only
BFFFO Trova primo uno in bit field (68020+) pOEP-only
BFINS Inserisci bit field (68020+) pOEP-only
BFSET Test bit field e setta (68020+) pOEP-only
BFTST Test bit field (68020+) pOEP-only
EOR OR esclusivo pOEP | sOEP
EORI EOR immediato pOEP | sOEP
EORI to CCR EOR immediato a CCR pOEP-only
EORI to SR EOR immediato a SR (supervisore) pOEP-only
NOT Complemento logico pOEP | sOEP
OR OR logico pOEP | sOEP
ORI OR immediato pOEP | sOEP
ORI to CCR OR immediato a CCR pOEP-only
ORI to SR OR immediato a SR (supervisore) pOEP-only

Manipolazione bit

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
BCHG Test bit e cambia pOEP | sOEP
BCLR Test bit e azzera pOEP | sOEP
BSET Test bit e setta pOEP | sOEP
BTST Test bit pOEP | sOEP

Shift e rotazione

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
ASL / ASR Shift aritmetico sinistra/destra pOEP | sOEP
LSL / LSR Shift logico sinistra/destra pOEP | sOEP
ROL / ROR Rotazione sinistra/destra (senza X) pOEP | sOEP
ROXL / ROXR Rotazione sinistra/destra con extend pOEP-only

Operazioni atomiche in memoria (68020+)

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
CAS Confronta-e-scambia pOEP-only
CAS2 Confronta-e-scambia dual (68020+; emulata su 68060) (emulata)

Controllo di programma

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
Bcc Salto condizionato pOEP-but-allows-sOEP¹
BRA Salto incondizionato pOEP-only
BSR Salto a sottoprogramma pOEP-only
CALLM Chiama modulo (solo 68020) (rimossa)
DBcc Decrementa e salta condizionatamente pOEP-but-allows-sOEP
JMP Salto pOEP-only
JSR Salto a sottoprogramma pOEP-only
NOP Nessuna operazione pOEP-only
RTD Ritorna e dealloca (68010+) pOEP-only
RTM Ritorna da modulo (solo 68020) (rimossa)
RTR Ritorna e ripristina CCR pOEP-only
RTS Ritorna da sottoprogramma pOEP-only
TRAPcc Trap se condizione (68020+; nativa su 68060, pOEP-only) pOEP-only

¹ Un'istruzione Bcc è pOEP-but-allows-sOEP se non è predetta dalla branch cache E la direzione è forward, OPPURE se la Bcc è predetta come branch "non preso". Le istruzioni Bcc predette-come-prese bloccano la sOEP fino a quando il branch non si risolve.

Controllo limiti (68020+)

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
CHK Controlla registro contro limiti pOEP-only
CHK2 Controlla registro contro limiti (68020+; emulata su 68060) (emulata)

Controllo di sistema

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
ILLEGAL Trap istruzione illegale pOEP | sOEP
RESET Asserta linea RESET (supervisore) pOEP-only
RTE Ritorna da eccezione (supervisore) pOEP-only
STOP Ferma e attendi interrupt (supervisore) pOEP-only
TRAP Istruzione trap (vettorizzata) pOEP | sOEP
TRAPV Trap su overflow pOEP-only
BKPT Breakpoint (68010+) pOEP-only

Controllo cache e MMU

Mnemonic Operazione 68000 68010 68020 68030 68040 68060 68060 Pipe
CINV Invalida linee di cache (68040+) pOEP-only
CPUSH Spedisci e invalida linee di cache (68040+) pOEP-only
PFLUSH Svuota voci ATC (68030+; sintassi/semantica differiscono per generazione; nativa su MC68060/MC68LC060 completi) pOEP-only
PFLUSHA Svuota tutte le voci ATC (68030+; nativa su 68040/68060 per MC68060UM §4.7.2 + Table 10-24) pOEP-only
PLOAD (PLOADR/PLOADW) Carica voce in ATC (68030+) pOEP-only
PMOVE Sposta da/verso registri MMU (68030+) pOEP-only
PMOVEFD Sposta da/verso registri MMU con flush-disable (68030+) pOEP-only
PTEST (PTESTR/PTESTW) Testa un indirizzo logico (68030/68040; non implementata su 68060, dove PLPA è l'helper di traduzione specifico del processore) pOEP-only

Unità in virgola mobile (FPU) — coprocessore MC68881/68882 su 68020/68030, integrata su 68040/68060

Il set di istruzioni FPU fu definito dal MC68881 e MC68882. Il MC68040 integra un sottoinsieme comunemente usato di quell'architettura in hardware; è importante notare che il suo set nativo include operazioni FP condizionali come FBcc, FDBcc, FScc, e FTRAPcc, mentre funzioni come FINT, FINTRZ, FGETEXP, FGETMAN, FMOD, FREM, FSCALE, FMOVECR, e le funzioni trascendentali fanno affidamento su M68040FPSP quando è richiesta la compatibilità software. Il MC68060 implementa un sottoinsieme hardware diverso: diverse operazioni che sono native sul 68040 (in particolare FDBcc, FScc, e FTRAPcc) non sono implementate sul 68060 e sono gestite attraverso il suo pacchetto di supporto software.

Il 68882 è pin- e software-compatibile con il 68881 e implementa lo stesso set di istruzioni FPU (per MC68881/MC68882UM §1.4, verificato contro Table 8-2 vs Table 8-3). Nessuna istruzione, operazione monadica, operazione diadica, mnemonic condizionale, o formato dati è aggiunto dal 68882 — ogni istruzione presente sul 68882 è anche presente sul 68881 (con tempi di esecuzione documentati in Table 8-2). Il 68882 invece migliora prestazioni e concorrenza:

  • Prestazioni: throughput maggiore rispetto al MC68881 attraverso miglioramenti implementativi, inclusa hardware dedicato per la conversione e minore overhead dell'interfaccia del coprocessore. Sia il MC68881 che il MC68882 usano un'architettura a unità aritmetica/barrel-shifter a 67 bit; il datapath a 67 bit non è una modifica esclusiva del MC68882.
  • Esecuzione concorrente di istruzioni FP multiple — solo il 68882 può emettere una nuova istruzione FP prima che la precedente completi (UM §1, §8).
  • Hardware dedicato per la conversione veloce binary-real ↔ extended-precision (UM §1).
  • Estensione dello state-frame per il contesto di esecuzione concorrente: lo state frame FSAVE/FRESTORE include bit solo per MC68882 per la mappa di validità dei registri operando (per UM §7.2.4.4, "INTERNAL STATE INFORMATION (MC68882 ONLY)").
  • Modalità periferica a 8 bit documentata più completamente (il 68881 la supporta anche tramite il pin SIZE).

Set di istruzioni floating-point MC68881/MC68882

La documentazione combinata ufficiale MC68881/MC68882 descrive l'ISA floating-point condivisa. I gruppi funzionali usati qui sono cinque classi principali:

  1. Movimenti (tra 68882 e memoria, o 68882 ↔ 68882): FMOVE.<fmt> <ea>,FPn / FMOVE.<fmt> FPm,<ea> / FMOVE.X FPm,FPn / FMOVEM <list>,<ea> (sposta registri multipli)
  2. Operazioni monadiche (un operando → risultato nel registro dati floating-point): 27 istruzioniFABS, FACOS, FASIN, FATAN, FATANH, FCOS, FCOSH, FETOX, FETOXM1, FGETEXP, FGETMAN, FINT, FINTRZ, FLOG10, FLOG2, FLOGN, FLOGNP1, FNEG, FSIN, FSINCOS, FSINH, FSQRT, FTAN, FTANH, FTENTOX, FTST, FTWOTOX
  3. Operazioni diadiche (due operandi → risultato in FPn): 10 istruzioniFADD, FCMP, FDIV, FMOD, FMUL, FREM, FSCALE, FSGLDIV, FSGLMUL, FSUB
  4. Branch, set, e trap su condizione: FBcc, FDBcc, FScc, FTRAPcc — ciascuna con 32 specificatori di test condizionale (F, EQ, OGT, OGE, OLT, OLE, OGL, OR, UN, UEQ, UGT, UGE, ULT, ULE, NE, T, SF, SEQ, GT, GE, LT, LE, GL, GLE, NGLE, NGL, NLE, NLT, NGE, NGT, SNE, ST)
  5. Varie / controllo FPU: FMOVE FPcr,<ea> / FMOVE <ea>,FPcr (registri di controllo: FPCR, FPSR, FPIAR), FSAVE <ea>, FRESTORE <ea>

Nella matrice sotto, le colonne 68020/68030 si applicano a entrambi il 68881 e il 68882 — i due coprocessori condividono lo stesso set di istruzioni per UM §1.4, quindi non ci sono istruzioni solo 68882 da marcare nelle etichette delle righe.

Mnemonic Operazione 68000 68010 68020 68030 68040 68060
FABS Valore assoluto ✅² ✅²
FADD Addizione FP ✅² ✅²
FBcc Branch FP condizionato ✅² ✅²
FCMP Confronto FP ✅² ✅²
FDBcc Decrementa e branch FP ✅² ✅² ⚠¹
FDIV Divisione FP ✅² ✅²
FINT Parte intera FP (silicio 68881+; emulata su 68040 via M68040FPSP) ✅² ✅² ⚠³
FINTRZ Parte intera FP, arrotondamento a zero (silicio 68881+; emulata su 68040 via M68040FPSP) ✅² ✅² ⚠³
FMOVE Sposta FP (incluso da/verso FPcr) ✅² ✅² ✅*
FMOVEM Sposta FP multiplo ✅² ✅² ✅*
FMOVECR Sposta da ROM costanti FP (silicio 68881+; emulata su 68040/68060 via M68040FPSP / 68060f.lib) ✅² ✅² ⚠³ ⚠¹
FMUL Moltiplicazione FP ✅² ✅²
FNEG Negazione FP ✅² ✅²
FNOP FP no-op ✅² ✅²
FRESTORE Ripristina state frame FPU (supervisore) ✅² ✅²
FSAVE Salva state frame FPU (supervisore) ✅² ✅²
FScc Set FP su condizione ✅² ✅² ⚠¹
FTRAPcc Trap FP su condizione ✅² ✅² ⚠¹
FSGLDIV Divisione FP singola precisione ✅² ✅²
FSGLMUL Moltiplicazione FP singola precisione ✅² ✅²
FSQRT Radice quadrata FP ✅² ✅²
FSUB Sottrazione FP ✅² ✅²
FTST Test FP ✅² ✅²
#### Trascendentali monadiche (silicio 68881+; silicio 68882 identico; emulate su 68040 via M68040FPSP e su 68060 via 68060f.lib)
Mnemonic Operazione 68000 68010 68020 68030 68040 68060
FACOS Arcocoseno FP ✅² ✅² ⚠³ ⚠¹
FASIN Arcoseno FP ✅² ✅² ⚠³ ⚠¹
FATAN Arcotangente FP ✅² ✅² ⚠³ ⚠¹
FATANH Arcotangente iperbolica FP ✅² ✅² ⚠³ ⚠¹
FCOS Coseno FP ✅² ✅² ⚠³ ⚠¹
FCOSH Coseno iperbolico FP ✅² ✅² ⚠³ ⚠¹
FETOX FP eˣ ✅² ✅² ⚠³ ⚠¹
FETOXM1 FP eˣ−1 ✅² ✅² ⚠³ ⚠¹
FGETEXP Ottieni esponente FP ✅² ✅² ⚠³ ⚠¹
FGETMAN Ottieni mantissa FP ✅² ✅² ⚠³ ⚠¹
FLOG10 FP log₁₀ ✅² ✅² ⚠³ ⚠¹
FLOG2 FP log₂ ✅² ✅² ⚠³ ⚠¹
FLOGN FP ln ✅² ✅² ⚠³ ⚠¹
FLOGNP1 FP ln(x+1) ✅² ✅² ⚠³ ⚠¹
FSIN Seno FP ✅² ✅² ⚠³ ⚠¹
FSINCOS Seno+coseno FP ✅² ✅² ⚠³ ⚠¹
FSINH Seno iperbolico FP ✅² ✅² ⚠³ ⚠¹
FTAN Tangente FP ✅² ✅² ⚠³ ⚠¹
FTANH Tangente iperbolica FP ✅² ✅² ⚠³ ⚠¹
FTENTOX FP 10ˣ ✅² ✅² ⚠³ ⚠¹
FTWOTOX FP 2ˣ ✅² ✅² ⚠³ ⚠¹

Trascendentali diadiche (silicio 68881+; FMOD/FREM/FSCALE emulate su 68040 via M68040FPSP e su 68060 via 68060f.lib)

Mnemonic Operazione 68000 68010 68020 68030 68040 68060
FMOD Modulo FP ✅² ✅² ⚠³ ⚠¹
FREM Resto IEEE FP ✅² ✅² ⚠³ ⚠¹
FSCALE Scala esponente FP ✅² ✅² ⚠³ ⚠¹

¹ Emulazione FPU 68060 (per MC68060UM §6.5.1, Table 6-11): la FPU 68060 non implementa queste nel silicio — fanno trap sul vettore 11 (F-line non implementata) e sono emulate dal M68060SP a livello OS (con 68060f.lib per FPU + 68060.lib per integer).

² Richiede un coprocessore floating-point esterno MC68881 o MC68882 sul MC68020/MC68030, connesso attraverso l'interfaccia coprocessore M68000. Il MC68040 e il MC68060 completi hanno la FPU integrata on-die.

³ Emulazione FPU 68040 (per MC68040UM §9.1 e Appendix E): la FPU 68040 non implementa queste nel silicio — fanno trap sul vettore 11 (F-line non implementata) e sono emulate dal M68040FPSP (Motorola Floating-Point Software Package) a livello OS.

L'MC68LC040 e l'MC68EC040 non hanno silicio FPU. Le istruzioni floating-point legali di MC68040/MC68881/MC68882 sono trattate come istruzioni floating-point non implementate ed entrano nel percorso di eccezione F-line (vettore 11); il software di sistema può emularle. Vedi le appendici specifiche per processore di MC68040UM per i dettagli dello stack frame delle varianti.

* Il 68060 ha mantenuto la maggior parte delle forme di FMOVE e FMOVEM ma la variante con lista di registri dinamica di FMOVEM.X e la forma #immediate, lista di 2 o 3 registri di controllo di FMOVEM.L non sono implementate (emulate). Vedi Differenze specifiche 68060 per le restrizioni esatte.

Differenze specifiche 68000

Il MC68000 (Motorola, 1979) è il riferimento per il modello di programmazione 680x0. I membri successivi della famiglia preservano la maggior parte del codice oggetto a livello utente ma introducono un piccolo numero di differenze di privilegio, istruzione, MMU e implementazione documentate sotto.

Panoramica architettura

  • Bus dati esterno a 16 bit (il 68008 aveva un bus a 8 bit; il 68000 stesso aveva 16 bit)
  • Bus indirizzi esterno a 24 bit (spazio di indirizzi lineare 16 MiB)
  • 8 registri dati (D0-D7, 32 bit) e 8 registri indirizzo (A0-A7, 32 bit; A7 è il puntatore stack attivo, con USP e SSP selezionati dal bit S del registro di stato)
  • Due livelli di privilegio (utente, supervisore) con puntatori stack separati
  • Registro di stato (SR) — 16 bit, il byte basso è il registro dei condition code (CCR) accessibile da modalità utente
  • Program Counter (PC) — registro a 32 bit ma solo i 24 bit bassi indirizzabili esternamente
  • Due chip MOS 8520 CIA forniscono timer e servizi I/O periferici usati dalla tastiera, porta parallela, segnali di controllo floppy e altre funzioni di sistema. Sono dispositivi della famiglia CIA imparentati con il MOS 6526; la UART seriale principale dell'Amiga è implementata in Paula, non nelle CIA
  • Nessuna MMU o FPU on-chip (entrambe erano esterne o aggiunte su CPU successive)
  • Nessuna cache istruzioni (aggiunta dal 68020 in poi)

Modalità di indirizzamento supportate dal 68000

Il 68000 supporta 14 modalità di indirizzamento (il set originale; il 68020 ne aggiunge altre):

Modalità Esempio sintassi Note
Registro dati diretto Dn
Registro indirizzo diretto An Una in più rispetto ai registri dati
Registro indirizzo indiretto (An)
Registro indirizzo indiretto con post-incremento (An)+ Per operandi byte, A7 incrementa di 2 invece di 1 per preservare l'allineamento a word
Registro indirizzo indiretto con pre-decremento -(An) Per operandi byte, A7 decrementa di 2 invece di 1
Registro indirizzo indiretto con displacement a 16 bit (d16,An)
Registro indirizzo indiretto con indice (8 bit) (d8,An,Xn) Solo 68000 — esteso nel 68020
Assoluto corto (xxx).W Valore a 16 bit esteso con segno alla larghezza di indirizzo del processore
Assoluto lungo (xxx).L Indirizzo a 32 bit
Program counter indiretto con displacement (d16,PC) Per codice position-independent
Program counter indiretto con indice (d8,PC,Xn)
Immediato (dato) #<data> Byte, word, o longword
Immediato (indirizzo) #<address> Valido come dato immediato per istruzioni come MOVEA; LEA non accetta una sorgente immediata
Forme registro di stato / CCR SR / CCR Il privilegio dipende dall'istruzione e dalla CPU: MOVE to SR è privilegiata; MOVE from SR diventa privilegiata dal 68010+; l'accesso al CCR non è privilegiato

Riepilogo set di istruzioni

Il set di istruzioni baseline del MC68000 include MOVE to CCR ma non MOVE from CCR; quest'ultima fu introdotta dal MC68010. Poiché la documentazione Motorola a volte presenta tabelle di riepilogo per tutta la famiglia che includono istruzioni da più di un membro, questo articolo evita di assegnare un singolo "conteggio mnemonico" al MC68000 a meno che la convenzione di conteggio non sia dichiarata esplicitamente.

Le distinzioni baseline importanti usate dalla matrice sono:

  • MOVE to CCR è disponibile sul MC68000.
  • MOVE from CCR, BKPT, MOVEC, MOVES, e RTD sono aggiunte del MC68010 e successivi.
  • MOVE from SR è non privilegiata sul MC68000 ma privilegiata sul MC68010 e processori successivi.
  • CAS, CAS2, istruzioni bit-field, CHK2/CMP2, PACK/UNPK, TRAPcc, forme di moltiplicazione/divisione long, e il set di istruzioni del coprocessore generico arrivano con il MC68020.

Note semantiche specifiche del 68000

  • MOVE from SR è non privilegiata sul 68000 (le CPU successive la rendono privilegiata per la conformità di virtualizzazione Popek-Goldberg).
  • RTE usa un semplice stack frame a 3 word (stato + PC); le CPU successive aggiungono formati espansi.
  • Nessuna cache istruzioni — ogni fetch di istruzione è un ciclo di bus (il 68010 introdusse una coda di prefetch a 3 word; il 68020 aggiunse una cache istruzioni a 256 byte).
  • Read-modify-write atomico è supportatoTAS usa un ciclo di bus read-modify-write indivisibile ed è la primitiva di sincronizzazione baseline sul 68000. I processori successivi aggiungono CAS/CAS2; la policy cache/coerenza a livello di sistema conta ancora nei design multiprocessore.

Rilevanza Amiga

Il 68000 alimentò la prima linea Amiga in due varianti di package:

  • DIP-64 (through-hole): Amiga 1000 (1985), A500 (1987), A2000 (1987).
  • PLCC-68 (surface-mount): CDTV (1991), Amiga 600 (1992).

L'A600 usò la variante PLCC surface-mount per adattarsi al case più compatto a basso costo (il clock nominale più basso rispetto all'A500 non è una misura di risparmio specifica dell'A600 — è determinato dallo standard video: i modelli Amiga PAL (A500, A600, A1200, ecc.) operano a ≈ 7.09379 MHz mentre i modelli NTSC (A500, A600, A1200, ecc.) operano a ≈ 7.15909 MHz, in entrambe le linee di modelli). I modelli Amiga successivi (A1200, A3000, A4000) furono equipaggiati con CPU di classe 68020/030/040. Il software specificamente mirato al 68000 generalmente migra bene verso i processori successivi, soggetto alle avvertenze di privilegio e compatibilità descritte in questo riferimento; il software che usa istruzioni di CPU successive ovviamente non può girare su un 68000 semplice.

Varianti della famiglia MC68000

La documentazione Motorola/NXP distingue il MC68000 originale e diverse implementazioni correlate. Suffissi di velocità come -8, -10, ecc. sono gradi di velocità, non varianti ISA separate. I membri della famiglia comunemente documentati rilevanti qui sono:

Variante Bus dati Bus indirizzi Note
MC68000 16 bit 24 bit (16 MiB) implementazione originale
MC68008 8 bit 20 bit o 22 bit, a seconda del package/versione larghezza bus dati esterno e pin count ridotti
MC68HC000 16 bit 24 bit implementazione CMOS del MC68000
MC68HC001 8/16 bit selezionabile 24 bit derivato CMOS con larghezza bus dati esterno selezionabile
MC68EC000 16 bit 24 bit implementazione embedded a basso costo
MC68SEC000 16 bit 24 bit implementazione statica, a basso consumo

Queste parti mantengono il modello di programmazione del MC68000 a meno che la loro documentazione individuale non dichiari diversamente; package, caratteristiche elettriche e dettagli dell'interfaccia bus differiscono tra varianti.

Differenze specifiche 68010

Il 68010 è binario-compatibile con il codice utente del 68000 eccetto per il cambio di privilegio importante di MOVE from SR: sul 68010 diventa solo-supervisore. Per preservare l'accesso in modalità utente ai condition code, il 68010 aggiunge MOVE from CCR. MOVE to CCR esiste già sul 68000 e rimane non privilegiata.

Il 68010 introdusse anche uno stack frame RTE espanso (il throwaway frame e il bus-cycle restart frame) per il recupero da bus-error e supporto memoria virtuale — l'istruzione si chiama ancora RTE, ma il formato dello stack frame differisce da quello del 68000. Gli handler di eccezione a livello OS devono controllare la format word sullo stack per distinguere i due casi.

In aggiunta a MOVE from CCR, il 68010 aggiunse altri quattro mnemonici:

Mnemonic Categoria Scopo
BKPT Controllo di sistema Esegue ciclo di acknowledge breakpoint; trap come istruzione illegale se nessun ack
MOVEC Movimento dati Sposta da/verso registri di controllo (VBR, SFC, DFC, USP sul 68010)
MOVES Movimento dati Sposta con function code alternato (supervisore)
RTD Controllo di programma Ritorna da sottoprogramma e dealloca parametri: estrae PC dallo stack, poi somma un displacement a 16 bit esteso con segno a SP ((SP) -> PC; SP + 4 + d_n -> SP)

Fu aggiunto anche un acceleratore modalità loop. Quando un loop a singola istruzione idoneo è controllato da DBcc, il processore può eseguire il loop senza recuperare ripetutamente l'istruzione del loop dal bus esterno. Questo è un meccanismo interno di loop/prefetch, non una cache di istruzioni generica.

Varianti MC68010

Questo riferimento tratta il MC68010 come il target architetturale 68010. Non inferire varianti 68010 aggiuntive EC, SEC o LC per analogia con la nomenclatura Motorola successiva a meno che un documento specifico Motorola per quella parte non sia disponibile.

Il 68010 non fu ampiamente usato nell'hardware Amiga — l'A500/A1000/A2000 usarono il 68000, e Commodore in seguito passò a processori di classe 68020 in macchine come l'A1200/CD32. Il Macintosh LC usò una CPU di classe 68020 e il Sun-3/80 usò un 68030, non un 68010.

Differenze specifiche 68020

Il MC68020 fu il primo membro della famiglia 680x0 con un data path a 32 bit (i precedenti erano a 16 bit sul bus dati), spazio di indirizzi a 32 bit (4 GiB lineari), una cache istruzioni on-chip (256 byte), e dynamic bus sizing (auto-detection porta 8/16/32-bit). Fu anche il primo ad aggiungere un'unità bit-field e un'interfaccia coprocessore.

Varianti MC68020

Variante Note
MC68020 implementazione completa con bus indirizzi esterno a 32 bit (spazio di indirizzi 4 GiB) e interfaccia coprocessore M68000
MC68EC020 ("Embedded Controller") bus indirizzi esterno a 24 bit (spazio di indirizzi 16 MiB); omette diversi segnali di interfaccia bus presenti sul MC68020 ma mantiene l'interfaccia coprocessore M68000, incluso il supporto per coprocessori Motorola come MC68881/MC68882

Usato in: Commodore CD32 (14.3 MHz) e come famiglia CPU base dell'Amiga 1200, il cui 68EC020 è limitato a un bus indirizzi esterno a 24 bit.

Il MC68020/MC68EC020 non ha MMU integrata. La funzionalità di gestione della memoria, quando richiesta, è esterna alla CPU; non descrivere il MC68EC020 come avente un "bus coprocessore MMU" fabbricato separatamente disabilitato mantenendo solo un'interfaccia FPU. L'interfaccia coprocessore M68000 documentata del processore è comune a MC68020/EC020.

Per MC68020UM Table 1-2 (pp. 1-10 → 1-11), il 68020 aggiunse le seguenti istruzioni non presenti sul 68000/68010:

Istruzioni bit-field (8)

BFCHG, BFCLR, BFEXTS, BFEXTU, BFFFO, BFINS, BFSET, BFTST

Operazioni atomiche in memoria (2)

CAS, CAS2 (dual-operand)

Istruzioni di controllo limiti (2)

CHK2, CMP2

Impaccamento BCD (2)

PACK, UNPK

Trap condizionale (1)

TRAPcc (con varianti dimensione operando .W e .L)

Chiamata/ritorno modulo (2) — solo 68020

CALLM, RTM

Interfaccia coprocessore (7)

cpBcc, cpDBcc, cpGEN, cpRESTORE, cpSAVE, cpScc, cpTRAPcc — definiscono il protocollo generico di istruzioni coprocessore della famiglia M68000 introdotto con il MC68020. I processori successivi mantengono gli encoding delle istruzioni coprocessore rilevanti, ma le loro implementazioni FPU/MMU integrate devono essere descritte secondo i manuali specifici del processore piuttosto che assumere l'interfaccia hardware del coprocessore esterno MC68020.

Varianti di moltiplicazione/divisione long

MULS.L (wide, Dh:Dl) 32×32→64, MULU.L (wide, Dh:Dl) 32×32→64, DIVS.L (<ea>,Dr:Dq) 64÷32→32r:32q, DIVU.L (<ea>,Dr:Dq) 64÷32→32r:32q, DIVSL.L (<ea>,Dr:Dq) 32÷32→32r:32q, DIVUL.L (<ea>,Dr:Dq) 32÷32→32r:32q.

Altre estensioni

  • EXTB.L — estensione segno byte→longword (il 68000/68010 aveva EXT.W e EXT.L solo per byte→word→longword; il 68020 aggiunge byte→long).

Modalità di indirizzamento introdotte sul 68020

Il 68020 aggiunse diverse modalità di indirizzamento non disponibili sulle CPU precedenti:

  • Registro indirizzo indiretto con indice (displacement a 8 bit e 32 bit)
  • Memory indirect ((d16,An) e (d32,An,Xi) varianti post-indicizzate)
  • PC-relativo con indice (displacement a 8 bit e 32 bit, indice scalato)
  • Indice scalato (An,Xi*scale dove scale ∈ {1, 2, 4, 8})

Le modalità di indirizzamento base M68000 complete (registro dati/indirizzo diretto, registro indirizzo indiretto, immediato, assoluto) restano valide.

Supporto macchina virtuale

Il MC68020 mantiene ed estende i meccanismi di eccezione riavviabile e privilegio introdotti con il MC68010, rendendolo adatto per design di sistema operativo a memoria virtuale e macchina virtuale. Evita di trattare il MC68020 come un confine pulito "parziale → completo Popek-Goldberg": il problema chiave di virtualizzazione del 68000 (MOVE from SR in modalità utente) era già stato cambiato sul MC68010.

Differenze specifiche 68030

Il MC68030 è il 68020 con una MMU integrata (la prima CPU M68k con MMU on-die) e due cache on-chip (256 byte ciascuna, cache istruzioni e dati separate con fill in modalità burst). È largamente binario-compatibile con il 68020 — quasi ogni istruzione del 68020 funziona sul 68030 — con due notevoli eccezioni: CALLM e RTM (le istruzioni di gestione modulo del 68020) furono rimosse sul 68030 per MC68030UM Table 1-2 (appaiono in MC68020UM Table 1-2 ma non nel set di istruzioni del 68030). Aggiunge una nuova famiglia di istruzioni di controllo MMU.

Varianti MC68030

Variante MMU Note
MC68030 PMMU on-die (parte completa) bus modalità burst, cache I/D separate
MC68EC030 ("Embedded Controller") nessuna MMU on-die variante embedded senza la MMU integrata MC68030

Il pattern è lo stesso del 68040/68060: suffisso "EC" = MMU disabilitata. Il 68030 non ha una variante LC corrispondente a "FPU disabilitata" perché la FPU su questa generazione è il coprocessore esterno 68881/68882 (il 68030 stesso non ha FPU integrata da disabilitare).

Per MC68030UM Table 1-2 (pp. 1-12 → 1-13), il set di istruzioni del 68030 è il set del 68020 più le seguenti istruzioni MMU (e rimuove CALLM e RTM):

Istruzioni MMU aggiunte sul 68030 (8)

Mnemonic Scopo
PFLUSH Svuota voci ATC (voce puntata da An o tutte le voci)
PFLUSHA Svuota tutte le voci nell'ATC
PLOADR / PLOADW Carica una voce nell'ATC (modalità accesso in lettura o scrittura)
PMOVE Sposta da/verso registri MMU: CRP, SRP, TC, TT0, TT1, MMUSR
PMOVEFD Sposta da/verso registri MMU selezionati sopprimendo l'effetto collaterale normale di flush ATC
PTESTR / PTESTW Sonda un indirizzo logico per la traduzione (modalità accesso in lettura o scrittura)

Queste istruzioni comunicano con la MMU on-die per gestire l'Address Translation Cache (ATC) — la cache 22-entry fully-associative che mantiene le traduzioni recenti indirizzo-virtuale→fisico. La famiglia PMOVE accede ai registri di controllo MMU (CRP, SRP, TC, TT0, TT1, MMUSR) che definiscono la struttura della tabella di traduzione.

Istruzioni rimosse o sostituite sul 68030

Il 68030 mantiene tutto il resto dal 68020 — CALLM, RTM sono elencati nel 68020UM Table 1-2 ma non nel 68030UM Table 1-2, il che significa che Motorola li rimosse con il 68030 (CALLM/RTM erano istruzioni di gestione modulo specifiche del 68020 che non videro uso diffuso al di fuori di alcuni sistemi di nicchia). Bit-field, atomiche, limiti, BCD, trap condizionale, e MUL/DIV long sono tutti mantenuti invariati.

Modalità di indirizzamento sul 68030

Il 68030 mantiene il set di modalità di indirizzamento MC68020 (per MC68030UM §1.4, Table 1-1) — nessuna nuova modalità di indirizzamento è introdotta. Le aggiunte del 68030 sono istruzioni MMU (PFLUSH, PLOAD, PMOVE, PTEST, ecc.), non modalità di indirizzamento. Per MC68030UM Appendix A, l'indice scalato (Xn.SIZE*SCALE) e le modalità di indirizzamento memory-indirect sono esplicitamente elencate come estensioni condivise di MC68020 e MC68030, non solo 68030.

Miglioramenti cache e bus

  • Cache istruzioni 256 byte + cache dati 256 byte on-chip (separate, con fill in modalità burst). Nuovo segnale MMU CIIN (cache inhibit input) permette all'hardware esterno di marcare regioni di bus come non-cacheable.
  • Bus modalità burst — riempie 4 long word (16 byte) per cache-line fill in un singolo burst, dimezzando la latenza effettiva della memoria.
  • Dynamic bus sizing esteso — auto-detection porta 8/16/32-bit completa sia su fetch di codice che di dati.

MMU sul 68030

La MMU del 68030 è un'unità di gestione memoria paginata (PMMU) con queste caratteristiche:

  • Traduzione 32 bit logico → 32 bit fisico
  • ATC 22-entry fully-associative
  • 8 dimensioni di pagina da 256 B a 32 KB
  • 2 regioni di traduzione trasparenti (sempre pass-through)
  • Registri puntatore root CPU/supervisore (CRP / SRP)
  • Attributi di protezione scrittura e protezione supervisore
  • Function code a 3 bit (FC0-FC2) per spazi di indirizzi separati

Il set di istruzioni MMU del 68030 è costruito attorno a PMOVE + PFLUSH + PLOAD + PTEST. Il 68040 cambia il modello di programmazione MMU ad accesso ai registri di controllo basato su MOVEC più le sue forme PFLUSH/PTEST. Il MC68060/MC68LC060 completi mantengono le operazioni native della famiglia PFLUSH e aggiungono PLPA; PTEST non è implementata sul 68060. Sul MC68EC060, che non ha MMU, le operazioni specifiche MMU hanno comportamento variante-specifico no-effect/illegal come documentato da MC68060UM.

Differenze specifiche 68040

Il MC68040 è la prima CPU di classe Amiga con MMU e FPU integrate on-die. Oltre a portare avanti il set di istruzioni del 68020/68030, il 68040 aggiunse i seguenti gruppi principali di istruzioni:

Varianti MC68040

Per MC68040UM (prefazione, "Documentation package for the MC68040, MC68040V, MC68LC040, MC68EC040, and MC68EC040V"), la famiglia 68040 ha cinque varianti documentate:

Variante MMU FPU Note
MC68040 ✅ on-die ✅ on-die parte completa (5V)
MC68040V ✅ on-die ❌ (no FPU) 3.3V static; stessa IU+MMU del MC68040 ma nessuna FPU (solleva eccezione FPU non implementata); aggiunge pin SCD/LFO/LOC e modalità stop a basso consumo; non pin-compatibile con MC68040
MC68LC040 ("Low Cost") ✅ on-die ❌ (no FPU) pin-compatibile con MC68040; nessun silicio FPU per MC68040UM §1.1.1 — le istruzioni FPU sollevano l'eccezione FPU non implementata, nessun pacchetto di emulazione
MC68EC040 ("Embedded Controller") nessuna MMU on-die ❌ (no FPU) variante embedded senza la MMU o FPU integrata
MC68EC040V variante di tensione dell'EC040 (3.3V)

Pattern (portato avanti concettualmente al 68060): le varianti LC mantengono la MMU ma omettono la FPU; le varianti EC omettono sia la MMU che la FPU integrate. Sulle varianti senza FPU della famiglia 68040, le istruzioni floating-point legali generano l'eccezione floating-point/F-line non implementata documentata così che il software di sistema possa emularle.

La matrice di istruzioni sopra assume la parte completa MC68040. Sul MC68040V, MC68LC040, e MC68EC040/MC68EC040V, le istruzioni FPU non sono eseguite dall'hardware ed entrano nel percorso di eccezione floating-point/F-line non implementata (vettore 11); un sistema operativo può fornire emulazione software. Sulle varianti EC la MMU integrata è assente, quindi la colonna MMU della parte completa non si applica.

Mask set del 68040 (per verifica community)

Per la lista mantenuta dalla community (compilata da fonti multiple incluso l'Amiga past originale), le seguenti revisioni di mask del 68040 sono documentate:

Mask Revisione MMU FPU Geometry [µm] max speed osservata [MHz] Nota
E71M 0.65 40 (nessuna ancora)
E23G 0.65 40 (nessuna ancora)
D39H 0.8 40 la ventola dovrebbe essere impostata su "cool", non "quiet"
D43B 0.8 25 Può girare a 33MHz con over/under-volting
D50D 0.8 33 gira molto caldo, non far girare senza cooler
D98D 0.8 33 mask XC, possibilmente più veloce
E31F 0.65 40 (nessuna ancora)
E26A TBD TBD 0.65 TBD (probabilmente 40) Non testata - nessun campione disponibile
E42K 0.65 40 Qualificazione MC completa
K63H 0.57 40 5V-type più veloce, finora non testato
L88M 0.57 40 5V-type più veloce, finora non testato
F54F 0.5 40 tipo 3.3V, non supportato da ACA1240/1260
D33T 0.5 40 tipo 3.3V, non supportato da ACA1240/1260

Istruzioni bit-field (portate dal 68020)

Il 68020 introdusse l'accesso dinamico ai bit-field. Tutti gli otto mnemonici bit-field — BFCHG, BFCLR, BFEXTS, BFEXTU, BFFFO, BFINS, BFSET, BFTST — sono portati avanti sul 68040.

Confronta-e-scambia atomico

CAS e CAS2 furono introdotti sul 68020. Il 68040 mantiene sia CAS che CAS2; sul 68060, CAS2 (la forma dual-operand) è emulata via M68060SP per MC68060UM Appendix C.2.

Moltiplicazione e divisione multi-precisione

Il 68020 introdusse le forme long di moltiplicazione e divisione:

Mnemonic Operazione
MULS.L 32×32→32
MULS.L (wide, Dh:Dl) 32×32→64
MULU.L 32×32→32
MULU.L (wide) 32×32→64
DIVS.L 32÷32→32q
DIVU.L 32÷32→32q
DIVSL.L 64÷32→32r:32q
DIVUL.L 64÷32→32r:32q

Il 68040 porta tutte queste.

Istruzioni cache, MMU e block-move specifiche del 68040

Il 68040 aggiunge nuove istruzioni cache/block-move e rivede le forme delle istruzioni MMU. PFLUSH e PTEST non sono nuovi nomi mnemonici — esistono già sul MC68030 — ma i loro encoding/semantica appartengono al modello di programmazione MMU del 68040:

Mnemonic Categoria Scopo
CINV (CINVL/CINVP/CINVA) Controllo cache Invalida linee di cache istruzioni/dati (68040+)
CPUSH (CPUSHL/CPUSHP/CPUSHA) Controllo cache Spedisci linee di cache dati dirty e invalida (68040+)
MOVE16 Movimento dati Sposta blocco allineato a 16 byte; sono definite forme con postincremento registro e absolute-long
PFLUSH (PFLUSH/PFLUSHN/PFLUSHA/PFLUSHAN) Controllo MMU Svuota voci ATC — sostituisce l'interfaccia PMOVE del 68030
PTEST (PTESTR/PTESTW) Controllo MMU Sonda stato voci ATC — sostituisce l'interfaccia PMOVE del 68030

Istruzioni rimosse/sostituite

Il 68040 rimuove o sostituisce diverse istruzioni dal 68030:

  • Interfaccia MMU sostituita: Il PMOVE del 68030 (sposta da/verso registri MMU: CRP, SRP, TC, TT0, TT1, MMUSR) è sostituito sul 68040 da MOVEC e le istruzioni PFLUSH/PTEST. Il codice che parla con la MMU del 68030 deve essere riscritto per il 68040.
  • Move-from-SR ancora privilegiata (portata dal 68010+).

FPU sul 68040

Il 68040 ha una FPU integrata (nessun 68882 esterno necessario). Implementa un sottoinsieme sostanziale e comunemente usato dell'ISA floating-point MC68881/MC68882 in hardware, mentre il software completa la compatibilità per le operazioni rimanenti e i tipi di dato:

  • Le trascendentali monadiche, FINT, FINTRZ, FGETEXP, FGETMAN, FMOD, FREM, FSCALE, FMOVECR, e funzioni di compatibilità correlate sono fornite dal M68040FPSP quando non sono eseguite direttamente nel silicio del 68040. Per contrasto, le istruzioni floating-point condizionali come FDBcc, FScc, e FTRAPcc sono implementate dal MC68040 stesso. Le istruzioni floating-point non implementate usano il vettore 11.
  • I formati dello state frame FRESTORE e FSAVE differiscono leggermente tra il 68882 e la FPU integrata del 68040; il codice OS deve fare il dispatch correttamente.

Differenze specifiche 68060

Il MC68060 è il processore finale della famiglia M68k progettato per il computing desktop ad alte prestazioni. Fu architettato per l'esecuzione superscalare dual-issue: due istruzioni intere possono essere emesse e completate in parallelo. Per raggiungere il timing closure alla frequenza di clock target, il 68060 rimosse (o "non implementò") diverse istruzioni di bassa utilità dalle generazioni precedenti. Quelle istruzioni sono ancora parte del set di istruzioni M68k per scopi di compatibilità binaria, ma sollevano un'eccezione sul 68060 e sono emulate in software dal M68060 Software Package (M68060SP)68060.lib (integer) e 68060f.lib (floating-point).

Istruzioni intere non implementate (M68060SP 68060.lib)

Per MC68060UM Appendix C.2, le seguenti istruzioni del 68020/68030/68040 sono non implementate nell'hardware del 68060:

Mnemonic Operazione Forma emulata
DIVU.L <ea>,Dr:Dq Divisione senza segno 64÷32→32r,32q forma wide-input (dividendo 64 bit)
DIVS.L <ea>,Dr:Dq Divisione con segno 64÷32→32r,32q forma wide-input (dividendo 64 bit)
DIVUL.L <ea>,Dr:Dq Divisione senza segno 32÷32→32r,32q forma long (output 64 bit)
DIVSL.L <ea>,Dr:Dq Divisione con segno 32÷32→32r,32q forma long (output 64 bit)
MULU.L <ea>,Dr:Dq Moltiplicazione senza segno 32×32→64 forma wide-output (risultato 64 bit)
MULS.L <ea>,Dr:Dq Moltiplicazione con segno 32×32→64 forma wide-output (risultato 64 bit)
MOVEP Dx,(d16,Ay) Sposta dati periferici → memoria entrambe le direzioni
MOVEP (d16,Ay),Dx Sposta dati periferici → registro entrambe le direzioni
CHK2 <ea>,Rn Controlla registro contro limiti qualsiasi dimensione
CMP2 <ea>,Rn Confronta contro limiti qualsiasi dimensione
CAS2 Dc1:Dc2,Du1:Du2,(Rn1):(Rn2) Confronta-e-scambia dual qualsiasi dimensione
CAS Dc,Du,<ea> (misaligned) Confronta-e-scambia con ea misaligned condizione di allineamento

Tutte queste sollevano l'eccezione vettore 61 (istruzione intera non implementata). L'handler di eccezione legge il PC in stack, decodifica l'istruzione, la emula usando istruzioni implementate, e riprende via RTE.

Regola: qualsiasi forma di moltiplicazione o divisione wide (input OR output è 64 bit) è non implementata sul 68060. Le forme non-wide di MULS.L / MULU.L / DIVS.L / DIVU.L (es. MULS.L <ea>,Dl che restituisce risultato 32 bit in Dl, DIVS.L <ea>,Dq che restituisce quoziente 32 bit in Dq) sono implementate in hardware. Le forme wide che producono un risultato 64 bit tramite coppia di registri (Dh:Dl per MUL, Dr:Dq per DIV, incluse DIVSL.L e DIVUL.L il cui risultato occupa Dr:Dq) sono tutte emulate.

MOVEP è emulabile sul 68060 via M68060SP per MC68060UM Appendix C.2 (l'implementazione solleva l'eccezione vettore 61 e l'handler di eccezione M68060SP emula l'istruzione). Non è pienamente rimossa dall'ISA del 68060.

Istruzioni floating-point non implementate (M68060SP 68060f.lib)

Per MC68060UM Section 6.5.1 (Table 6-11), il 68060 non implementa le seguenti istruzioni FPU di 68881/68882/68040 — sollevano il vettore 11 (F-line non implementata):

Categoria Mnemonici
Trascendentali monadiche FACOS, FASIN, FATAN, FATANH, FCOS, FCOSH, FETOX, FETOXM1, FGETEXP, FGETMAN, FLOG10, FLOG2, FLOGN, FLOGNP1, FSIN, FSINCOS, FSINH, FTAN, FTANH, FTENTOX, FTWOTOX
Aritmetica diadica / correlata FMOD, FREM, FSCALE
Varie FMOVECR, FTRAPcc, FDBcc, FScc

Le seguenti forme di effective-address sono una classe separata: FMOVEM.X con lista di registri dinamica, FMOVEM.L maschere immediate selezionanti registri di controllo multipli, e forme sorgente immediate extended/packed. Queste generano l'eccezione effective-address non implementata (vettore 60) piuttosto che il percorso floating-point-unimplemented-instruction sul vettore 11.

La FPU è ancora integrata on-die sul 68060, e le seguenti restano implementate in hardware: FABS, FADD, FBcc, FCMP, FDIV, FINT, FINTRZ, FMOVE (la maggior parte delle forme), FMOVEM (la maggior parte delle forme), FMUL, FNEG, FNOP, FRESTORE, FSAVE, FSGLDIV, FSGLMUL, FSQRT, FSUB, FTST. FSCALE non è in questa lista nativa; è una delle operazioni floating-point non implementate.

FINT e FINTRZ sono documentate sia per il MC68881 che per il MC68882 e sono implementate nell'hardware MC68060. Sul MC68040 sono parte dell'ISA floating-point compatibile ma non sono implementate dalla FPU on-chip; software come M68040FPSP le fornisce attraverso il percorso di eccezione floating-point non implementata.

MMU e cache sul 68060

La famiglia 68060 ha tre varianti che differiscono per presenza di MMU e FPU:

Variante MMU FPU Note
MC68060 ✅ on-die ✅ on-die parte completa
MC68LC060 ("Low Cost") ✅ on-die ❌ (no FPU) le istruzioni FP legali richiedono il percorso di eccezione floating-point/supporto-software
MC68EC060 ("Embedded Controller") nessuna MMU on-die ❌ (no FPU) variante embedded senza la MMU o FPU integrata

Il MC68060 e il MC68LC060 hanno entrambi una MMU on-die configurata attraverso i registri di controllo stile 68040/68060. Il MC68EC060 omette la MMU integrata; il software deve trattarlo come una variante senza MMU piuttosto che assumere un'interfaccia PMMU esterna standard.

Mask set del 68060 (per verifica community)

Per la lista mantenuta dalla community (compilata da fonti multiple incluso l'Amiga past originale), le seguenti revisioni di mask del 68060 sono documentate:

Mask Revisione MMU FPU Geometry [µm] max speed osservata [MHz] Nota
D11W 1 0.5 50 prototipo raro
F43G 1 0.5 66 Spesso trovato in chip marchiati 68EC060
F84W -- -- -- 0.0 0 Chip falso venduto come Rev.6
F10H -- -- -- 0.0 0 Chip falso venduto come Rev.6
G65V 5 0.5 75 Spesso trovato in chip marchiati 68EC060
G59Y 4 0.42 100 Qualificazione MC completa
E41J 6 0.42 100 Qualificazione MC completa

Il MC68060/MC68LC060 completi implementano la famiglia PFLUSH (PFLUSH, PFLUSHN, PFLUSHA, PFLUSHAN) per i loro ATC on-die. PTEST non è implementata sul 68060; PLPA (carica indirizzo fisico) fornisce un'alternativa orientata a diagnostica/table-walk. Il MC68EC060 non ha MMU, quindi gli opmode specifici MMU hanno comportamento variante-specifico e non devono essere descritti come il comportamento del MC68060 completo.

La famiglia MC68060 mantiene cache istruzioni e dati separate on-chip (8 KiB ciascuna sul design MC68060 completo); il comportamento di controllo cache dovrebbe essere verificato contro la documentazione esatta della variante LC/EC quando si scrive codice di sistema a basso livello.

Il 68060 mantiene le istruzioni di controllo cache CINV e CPUSH del 68040 per gestire la sua cache istruzioni 8 KB on-die + cache dati 8 KB (il 68060 ha pipeline superscalari dual-issue unificate).

Modello di esecuzione superscalare

Il 68060 è l'unico 680x0 classico con esecuzione superscalare dual-issue. Il suo core di esecuzione integer contiene una primary Operand Execution Pipeline (pOEP) e una secondary Operand Execution Pipeline (sOEP). L'accoppiamento delle istruzioni dipende dalla classificazione superscalare in MC68060UM Section 10, dalle dipendenze tra operandi, e dalle restrizioni delle modalità di indirizzamento:

  • pOEP-only: istruzioni che richiedono la pipeline primaria o altrimenti bloccano l'accoppiamento
  • pOEP / sOEP eligible: operazioni intere semplici e movimenti che soddisfano le regole di accoppiamento del manuale
  • pOEP while allowing sOEP activity: branch selezionati/casi FPU e altre classi esplicitamente identificate dalle tabelle di timing
  • Barriere di accoppiamento / classi multi-cycle: operazioni identificate dal manuale come bloccanti o che occupano risorse necessarie alla pipeline secondaria. Non inferire una barriera solo dal fatto che un'istruzione cambia il CCR; usa la classificazione pOEP/sOEP e le regole di dipendenza.

Il codice compilato che rispetta queste barriere può vedere ~1.5–1.8× il throughput per clock vs. 68040. La comunità di sviluppatori AmigaOS (PhxASS vbcc) aveva pragma di scheduling specifici per emettere coppie di istruzioni dual-issue-friendly.

Pacchetto M68060SP

Il M68060 Software Package (M68060SP) è il pacchetto di supporto software Motorola/Freescale per la compatibilità MC68060. Fornisce routine di supporto integer e floating-point, inclusi handler/librerie per le operazioni non implementate:

  • 68060.lib — emulazione istruzioni intere (sollevata sul vettore di eccezione 61)
  • 68060f.lib — emulazione istruzioni FPU (sollevata sul vettore 11)
  • File header m68060.h (vettori di eccezione, formati frame, definizioni di struct)

Motorola/Freescale distribuì l'M68060SP separatamente come pacchetto software di integrazione di sistema; la disponibilità e l'integrazione in specifici sistemi operativi o toolchain è platform-dependent.

Sui sistemi Amiga con acceleratore 68060, il software di supporto CPU della scheda/OS normalmente installa gli handler di eccezione richiesti durante l'inizializzazione del sistema. I nomi esatti delle librerie e i dettagli di integrazione sono accelerator- e OS-distribution-specific, quindi il codice applicativo non dovrebbe assumere che una generica 68060.library sia universalmente presente o che essa faccia direttamente da wrapper per le librerie oggetto Motorola.

Semantica CAS2 e CAS sul 68060

  • CAS2 (68020/030/040): completamente non implementata sul 68060 — emulata via 68060.lib
  • CAS (allineata): implementata in hardware
  • CAS con un effective address misaligned: non implementata nell'hardware MC68060 e gestita attraverso il percorso di supporto-software del vettore 61 se un emulatore è installato

Il software non dovrebbe fare affidamento su CAS deliberatamente misaligned come tecnica di sincronizzazione portabile: il MC68060 tratta quella forma come un caso intero non implementato.

Riepilogo matrice di compatibilità

La famiglia è ampiamente object-code compatibile verso l'alto, ma non strettamente monotona: diverse istruzioni o forme di istruzione scompaiono dall'hardware sui processori successivi, e alcune sono recuperate attraverso supporto software guidato dalle eccezioni. I conteggi mnemonici sotto mantengono la convenzione di conteggio originale dell'articolo così che la progressione attraverso le generazioni di CPU resti visibile; le forme di istruzione che condividono un mnemonic non sono necessariamente contate separatamente. Per il MC68060, i mnemonici nativi e emulati software sono distinti esplicitamente.

Metrica 68000 68010 68020 68030 68040 68060
Mnemonici totali (convenzione di conteggio dell'articolo) 73 77 105 106 113 108
Sottoinsieme compatibile 68000 73 73 73 73 73 73
Nuovi mnemonici vs. predecessore 4 28 1 7 −5
Implementati in hardware 73 77 105 106 113 72
Emulati 0 0 0 0 27 36

Per il MC68060, i 36 gruppi mnemonici gestiti software in questa convenzione comprendono 8 gruppi interi (CMP2, CHK2, CAS2, MOVEP, DIVSL.L, DIVUL.L, MULS.L wide, MULU.L wide), 21 operazioni floating-point monadiche, 3 operazioni floating-point diadiche (FMOD, FREM, FSCALE), e 4 operazioni floating-point varie (FDBcc, FScc, FTRAPcc, FMOVECR). Questo è un riepilogo a livello di mnemonic; encoding/forme individuali addizionali come DIVS.L/DIVU.L wide, CAS misaligned, e forme restricted di floating-point effective-address fanno anch'esse trap per la gestione software.

Transizione Punti di compatibilità importanti
68000 → 68010 MOVE from SR diventa privilegiata; MOVE from CCR, BKPT, MOVEC, MOVES, e RTD sono aggiunte.
68010 → 68020 Modello di indirizzamento/bus a 32 bit, indirizzamento scalato e memory-indirect, bit-field, CAS/CAS2, CHK2/CMP2, PACK/UNPK, TRAPcc, moltiplicazione/divisione long, e istruzioni coprocessore sono aggiunte.
68020 → 68030 CALLM/RTM sono rimosse; istruzioni MMU integrate sono aggiunte; il resto dell'ISA integer mainstream del 68020 è mantenuto.
68030 → 68040 Il modello di programmazione MMU cambia; CINV, CPUSH, e MOVE16 sono aggiunte; una FPU hardware implementa un sottoinsieme comune 68881/68882 mentre FPSP fornisce il resto.
68040 → 68060 Esecuzione superscalare pOEP/sOEP; diverse forme intere (MOVEP, CAS2, CHK2, CMP2, MUL/DIV wide, CAS misaligned) e molte operazioni floating-point fanno trap per la gestione software; PTEST non è implementata e PLPA è aggiunta.

Per il MC68060, i percorsi di eccezione chiave sono vettore 61 per istruzioni intere non implementate, vettore 60 per forme di effective-address non implementate, e vettore 11 per casi F-line floating-point non implementato/disabilitato.

Tabella vettori di eccezione (base + differenze chiave per CPU)

La tabella vettori M68k contiene 256 voci long-word. Sul MC68000 inizia all'indirizzo fisico $000000; sui processori con un Vector Base Register (MC68010+) la tabella può essere riposizionata.

Assegnazioni vettori base MC68000

Vettore # Offset Assegnazione
0 $000 Reset SSP iniziale
1 $004 Reset PC iniziale
2 $008 Bus error
3 $00C Address error
4 $010 Illegal instruction
5 $014 Divisione intera per zero
6 $018 Istruzione CHK
7 $01C Istruzione TRAPV
8 $020 Privilege violation
9 $024 Trace
10 $028 Emulatore Line 1010 (A-line)
11 $02C Emulatore Line 1111 (F-line)
12-13 $030-$034 Riservati sul MC68000
14 $038 Riservato sul MC68000; usato come format error sulle CPU successive
15 $03C Vettore interrupt non inizializzato
16-23 $040-$05C Riservati
24 $060 Spurious interrupt
25-31 $064-$07C Autovettori interrupt livello 1-7
32-47 $080-$0BC TRAP #0 ... TRAP #15
48-63 $0C0-$0FC Riservati sul MC68000 base
64-255 $100-$3FC Vettori definiti dall'utente

MC68010 e successivi

Il MC68010 aggiunge la macchina VBR e restartable exception-frame. In particolare, il vettore 14 è il vettore format-error usato quando RTE incontra un formato di frame invalido. I processori successivi riutilizzano vettori precedentemente riservati addizionali per eccezioni specifiche FPU/MMU.

Vettori floating-point MC68040

Il MC68040 usa il vettore 11 per un'istruzione floating-point non implementata (anche il vettore F-line generico). Le eccezioni aritmetiche floating-point occupano i vettori 48-55; il vettore 55 è l'eccezione floating-point unimplemented-data-type. Le varianti senza FPU MC68LC040/MC68EC040 instradano anch'esse le istruzioni floating-point legali attraverso il percorso F-line/non implementata così che il software possa emularle.

Vettori istruzioni non implementate MC68060

Le assegnazioni MC68060 rilevanti per la compatibilità software sono:

Vettore # Assegnazione
10 Emulatore A-line / line-1010 non implementato
11 F-line non implementata, floating-point disabilitata, o istruzione floating-point non implementata
55 Tipo di dato floating-point non supportato
60 Effective address non implementata
61 Istruzione intera non implementata
62-63 Riservati / non assegnati

Così il supporto software M68060 usa il vettore 61 per l'emulazione integer e il vettore 11 per l'emulazione floating-point/F-line; il vettore 60 gestisce le forme speciali di effective-address non implementate.

Mapping interrupt Amiga

Sull'hardware Amiga classico, i vettori CPU 25-31 sono semplicemente gli autovettori M68k standard livello 1-7. Il controller di interrupt custom-chip Amiga multiplexa le sorgenti di interrupt di sistema sui livelli 1-6; CIA-A contribuisce attraverso la sorgente livello-2 PORTS e CIA-B attraverso la sorgente livello-6 EXTER. Il livello 7 è il livello di interrupt non mascherabile e non è un "vettore CIA" dedicato. L'hardware di espansione dovrebbe usare i meccanismi di interrupt del sistema operativo piuttosto che assumere range di vettori fissi come 64-95 per dispositivi Zorro.

Conteggi cicli di clock

I conteggi cicli per istruzione variano per modalità di indirizzamento (il calcolo dell'effective-address aggiunge cicli) e per tipo di operando (registro vs memoria). Le tabelle sotto mostrano il conteggio cicli base caso migliore (tipicamente registro-a-registro o la modalità di indirizzamento più veloce) per ciascuna istruzione per CPU. Per le tabelle complete per-modalità vedi il corrispondente Manuale Utente Motorola:

  • 68000/68010 — MC68000UM Table 8-1 → 8-9
  • 68020 — MC68020UM Appendix A (tabelle cicli per-modalità)
  • 68030 — MC68030UM Section 9 (tabelle cicli per-modalità)
  • 68040 — MC68040UM Section 10 (tabelle cicli per-modalità)
  • 68060 — MC68060UM Section 10 (Tables 10-6 → 10-25)

Conteggi cicli base 68000/68010 (per MC68000UM Table 8-1 → 8-9)

Mnemonic Caso migliore (regs) Variante long Note
ABCD 8 forma Dx,Dy
ADD 4 8 (long) forma Dx,Dy
ADDA 8 An + Dx
ADDI 8 16 #imm, Dx
ADDQ 4 8 #imm, Dx
ADDX 4 8 forma Dx,Dy
AND 4 8 forma Dx,Dy
ANDI 8 16 #imm, Dx
ASL ASR 6+2n fino a 14 shift registro per registro
Bcc 10 (presa) / 8 (non presa)
BCHG BCLR BSET BTST (reg) 8-12 forma Dx
BRA 10
BSR 18
BTST (imm) 8-12
CHK 10+ (trap se fallisce)
CLR 4-6 6-8 forma Dx
CMP 4 6 forma Dx,Dy
CMPA 6
CMPI 8 12 #imm, Dx
CMPM 12 20 (Ay)+, (Ax)+
DBcc 10-16 (presa/non-presa)
DIVS DIVU 158 (word) / fino a 170 (long) altamente variabile
EOR 4 8 forma Dx,Dy
EORI 8 16 #imm, Dx
EXG 6
EXT.W 4
EXT.L 4
ILLEGAL 34
JMP 8 forma (An)
JSR 16 forma (An)
LEA 4 forma (An)
LINK 16
LSL LSR 6+2n fino a 14
MOVE 4 4 Dx,Dy (reg-a-reg)
MOVE 8 (byte/word) / 12 (long) (An)+ a (An)+
MOVE to/from SR/CCR/USP 8-12 supervisore
MOVEA 4 4
MOVEM 12+4n (n registri) fino a 36 reg-a-mem
MOVEP 16 24 (d16,Ay), Dx
MOVEQ 4
MULS MULU 38 (word) / 38+ (long) 38-70
NBCD 8 forma Dx
NEG 4 6 forma Dx
NEGX 4 6 forma Dx
NOP 4
NOT 4 6 forma Dx
OR 4 8
ORI 8 16
PEA 12 forma (An)
RESET 132
ROL ROR ROXL ROXR 6+2n fino a 14
RTD 16 68010+
RTE 20
RTR 20
RTS 16
SBCD 8
Scc 4-8 8-10
STOP 4
SUB 4 8
SUBA 8
SUBI 8 16
SUBQ 4 8
SUBX 4 8
SWAP 4
TAS 4 (reg) / 10 (mem)
TRAP 34
TRAPV 34
TST 4 4
UNLK 12

Conteggi cicli base 68020 (per MC68020UM Appendix A)

Mnemonic Caso migliore (regs) Note
ABCD SBCD NBCD 6 forma Dx,Dy
ADD SUB 4 forma Dx,Dy
ADDQ SUBQ 4 #imm, Dx
ADDX SUBX 4 forma Dx,Dy
ADDI SUBI ANDI ORI EORI CMPI 8 #imm, Dx
AND OR EOR CLR NEG NOT TST NEGX 4 forma Dx,Dy
ADDA SUBA CMPA 8
CMP 4 forma Dx,Dy
MULS.W MULU.W MULS.L MULU.L 28 (word) / 44 (long) caso migliore, no early-out
DIVS.W DIVU.W 44 word divide, caso peggiore
DIVS.L DIVU.L 92 (best) / 158 (worst) long divide
DIVSL.L DIVUL.L 96-168 forma 64÷32
EXG 6
EXT.W EXT.L EXTB.L 4
SWAP 4
ASL ASR LSL LSR ROL ROR ROXL ROXR 6+2n fino a 14 (per conteggio)
Bcc 10 (presa) / 8 (non) BCHG su 68020 mette in cache i target
BRA 10
BSR 18
BCHG BCLR BSET BTST (reg) 8-12
BFCHG BFCLR BFSET BFTST 12-18 68020+
BFEXTS BFEXTU BFINS BFFFO 12-18 68020+
CHK CHK2 CMP2 8+ cicli (trap) 68020+ CHK2/CMP2
CAS CAS2 12+ 68020+
CLR 4 reg
DIVS DIVU 44 (word) / 92-158 (long) variabile
EXT 4
ILLEGAL 20
JMP (An) 8
JSR (An) 16
LEA (An) 4
LINK 16
MOVE 4 Dx,Dy (reg-a-reg)
MOVE (long) 8 memoria-a-memoria
MOVEC 12 supervisore, 68010+
MOVEM 12+4n (n registri) fino a 36+
MOVEP 16 (word) / 24 (long) 68020+ in formato diverso
MOVEQ 4
MULS MULU 28-44
NBCD 8
NEG NEGX NOT TST 4
NOP 4
OR EOR AND 4
ORI ANDI EORI 8 (word) / 16 (long)
PACK UNPK 8 68020+
PEA 12
RESET 132
ROL ROR ROXL ROXR 6+2n
RTD 16 68010+
RTE 20
RTR 20
RTS 16
Scc 4-8
STOP 4
SUB 4
SWAP 4
TAS 4 (reg) / 14 (mem)
TRAP 34
TRAPcc 18+ 68020+
TRAPV 34
TST 4
UNLK 12

Conteggi cicli base 68030 (per MC68030UM Section 9)

Il 68030 generalmente eguaglia i cicli del 68020 per operandi registro, ma le cache integrate riducono significativamente i conteggi cicli effettivi per accessi in memoria (cache hit: 0 cicli extra; cache miss: penalty aggiunta per MC68030UM §9).

Mnemonic Caso migliore (regs) Note
Tutte le op ALU registro-registro stesso del 68020 cache abilitata
MOVE (memoria, cache hit) 4 no wait state
MOVE (memoria, cache miss) 8+ (penalty bus) dipende dalla velocità della memoria
MOVEM più veloce del 68020 fill cache in modalità burst
PMOVE PFLUSH PTEST PLOAD 12-30 cicli 68030-specifico
MULS.L MULU.L 28-44 cicli stesso del 68020

Conteggi cicli base 68040 (per MC68040UM Section 10)

Il 68040 usa una pipeline integer a 6 stadi (IF, ID, EA, EX1, EX2, EX3, WB) con cache istruzioni e dati separate, una branch cache, e una FPU integrata. Il formato di timing è L + X dove L = lead time (cicli per cui l'istruzione può stallare) e X = cicli di esecuzione base. La tabella sotto dà il conteggio cicli base caso migliore (tipicamente registro-a-registro, operando Dn) per ciascuna istruzione, che è anche ciò che l'unità integer può sostenere nella pipeline a 1 IPC. I cicli di calcolo dell'effective-address (0-3 per Table 10-2) devono essere aggiunti per operandi non-registro.

Aritmetica interi

Mnemonic Caso migliore (regs) Note
ADD SUB AND OR EOR TST (D→D) 1 registro-a-registro
ADD SUB (D→M) 1 destinazione memoria
ADDA SUBA (D→A) 2 (M68040UM Table 10-6)
ADDI SUBI ANDI ORI EORI (reg) 1
ADDQ SUBQ (reg) 1
ADDX SUBX (D→D) 1
ADDX SUBX (M→M) 3 (predecrement); 4 (regolare)
CLR (D→D) 1
CLR (D→M) 1 destinazione memoria
CMP (D→D) 1
CMPA (D→A) 2
CMPI (reg) 1
CMPM 1 postincremento
NEG NOT NEGX (D→D) 1
TST (D→D) 1
EXT.W EXT.L EXTB.L 1
SWAP 1
MULS.W MULU.W 2 moltiplicazione word
MULS.L MULU.L (32×32→32) 3 moltiplicazione long
MULS.L wide MULU.L wide (32×32→64) 4
DIVS.W DIVU.W ≤18 (variabile) word divide, condizionale
DIVS.L DIVU.L (32÷32→32q) ≤44 (variabile) long divide
DIVS.L wide DIVU.L wide (64÷32→32r:32q) 8-44 (peggiore)
DIVSL.L DIVUL.L (32÷32→32r:32q) 4-44 (peggiore)
Op BCD (ABCD, SBCD, NBCD) (D→D) 3
Op BCD (M→M) 3 (o 3L+1 per alcune forme)
NEGX.S NEGX.B 1
MOVE (D→D) 1
MOVE (D→M, byte/word) 1 destinazione memoria
MOVE (D→M, long) 1
MOVEA (D→A) 1
MOVEQ 1
EXG 1 registro-registro

Logiche

Mnemonic Caso migliore (regs) Note
AND OR EOR (D→D) 1
ANDI ORI EORI (D→D) 1
NOT (D→D) 1
EXG 1

Manipolazione bit

Mnemonic Caso migliore (regs) Note
BCHG BCLR BSET (D→D) 1
BCHG BCLR BSET (M→M) 1 (write-back) atomica per BSET/BCLR
BTST (D→D) 1
BTST (M) 1 (no write-back)

Bit-field (68020+)

Mnemonic Caso migliore (regs) Note
BFCHG BFCLR BFSET BFTST (reg) 1-2 68040 pipeline BF bene
BFEXTS BFEXTU BFINS BFFFO 1-2
PACK UNPK (D→D) 1

Shift/rotazioni

Mnemonic Caso migliore (regs) Note
ASL ASR LSL LSR (D→D, per registro) 1 + 1/ciclo shift fino a 5 per byte, 17 per long
ASL ASR LSL LSR (D→D, immediato) 1 (word) / 1 (long, ≤8) / 2 (long, >8)
ROL ROR ROXL ROXR (D→D, per registro) 1 + 1/ciclo fino a 5 (byte) / 17 (long)
ROL ROR ROXL ROXR (D→D, immediato) 1-2

Controllo di programma

Mnemonic Caso migliore Note
Bcc (predetta correttamente) 1 branch cache hit
Bcc (predetta, non presa) 1 dual-issue con successiva
Bcc (predetta, presa) 1
Bcc (non predetta) 3-5 branch cache miss
BRA (presa) 4
BSR 7
DBcc (count ≥ 0) 4
DBcc (presa) 7
JMP (An) 4
JMP (d16,An) 4
JMP (d8,An,Xn) 6
JSR (An) 5
JSR (d16,An) 5
JSR (d8,An,Xn) 7
LEA (An) 1 la più veloce di tutte
LEA (d16,An) 1
LEA (d8,An,Xn) 3
RTS 5
RTR 7
RTE (Formato $0) 13 throwaway 68020+
RTE (Formato $1) 23 bus cycle restart
RTE (Formato $2) 14
RTE (Formato $3) 20
RTD 6 68010+
JMP (d16,PC) 5
JSR (d16,PC) 6
NOP 1 un ciclo (equivalente TRAPF)
TRAP #n 16 trap + fetch vettore
TRAPcc (presa) 19
TRAPcc (non presa) 5
TRAPV (presa) 19
TRAPV (non presa) 5
LINK 5
UNLK 2
BKPT 10+ (ack BKPT) 68010+

Sistema / privilegiate

Mnemonic Caso migliore Note
ILLEGAL 14
RESET 521 timing reset esterno 68040
RTE (vedi Controllo programma) 13-23 per formato stack
STOP 1 (poi idle)
ANDI ORI EORI a SR/CCR 8 (1L+7) 68000-compatibile
MOVE to/from SR 3 (1L+2) / 5 (1L+4)
MOVE to/from CCR 3
MOVE USP 3 68010+
MOVEC 4 (1L+3) 68010+
MOVES 7 (1L+6) 68010+
MOVEM (reg→mem) 4+1/n (best) 12+4n per mem→reg su 68000; su 68040: 4-9 cicli
MOVEP 4-8 (word/long) solo 68000
TAS (reg) 1 68000 atomico anche su 68040 (locked transfer)
TAS (mem) 4+ con locked bus transfer
BKPT 10+ 68010+

Atomiche (68020+)

Mnemonic Caso migliore Note
CAS (allineata) 1-3 atomica; 1 in cache, 3 con bus locked transfer
CAS2 1-5 solo 68020/30 (rimossa su 68040?) — in realtà ancora supportata, 5-7 cicli
CHKVAR2 (variante)

MMU (PMMU 68030, MMU interna 68040)

Mnemonic Caso migliore Note
PFLUSH (An) 11 (1L+10) svuota una voce
PFLUSHA 11 (1L+10) svuota una (ATC miss)
PFLUSHAN 27 (1L+26) svuota tutte + invalida
PFLUSHN (An) 11 (1L+10) svuota una, no invalidate
PTESTR PTESTW 25 (11L+14) ricerca tabella 3-livelli, no scritture descrittore, memoria 4-clock

Cache (68040+)

Mnemonic Caso migliore Note
CINV 4-12 (per linea) invalida linea/e di cache
CPUSH 4-12 (per linea) spedisci + invalida

MOVE16 (68040+)

Mnemonic Caso migliore Note
MOVE16 (An)+ → (An)+ 8 (1L+7) prima; +8 per successiva trasferimento burst allineato a linea
MOVE16 (An)+ → (xxx).L 8 (1L+7)
MOVE16 (xxx).L → (An)+ 8 (1L+7)
MOVE16 (cache hit) 11-8=3 per linea (1L+2) sia sorgente che dest in cache

Floating-point (set istruzioni 68882 su FPU integrata)

Per MC68040UM §10.7 (Floating-Point Unit Instruction Timings), la FPU integrata esegue le istruzioni in parallelo con l'unità integer quando l'unità integer non ha accessi in memoria pendenti. I tempi dipendono dal formato dati e tipo di operando:

Operazione FPU Reg-Reg (W) Reg-Reg (D) Reg-Reg (X) Reg-Mem Mem-Reg
FADD FSUB 4 4 5 8 8
FMUL 4 5 6 9 9
FDIV 24 38 56 32 32
FSQRT 56 56 80 64 64
FABS FNEG FTST FCMP 2 2 3 6 6
FMOVE.X 2 2 2 4 (mem read) 4 (mem write)
FMOVE.P 12 12 12 12 (write) 16 (read)
FINT FINTRZ 3 3 4 6 6
FMOVECR 5 5 5
FSIN FCOS FTAN 56 56 80 60 60
FSINCOS 100 100 120 110 110
FLOG10 FLOG2 FLOGN 60 60 80 60 60
FLOGNP1 80 80 100 80 80
FETOX 56 56 80 60 60
FETOXM1 80 80 100 80 80
FTENTOX FTWOTOX 56 56 80 60 60
FSQRT (solo 68882) 56 56 80 60 60
FMOD FREM 100 100 100 100 100
FSAVE 22 22 22 22
FRESTORE 25 25 25 25
FBcc (presa) 10 10 10 10 10
FBcc (non presa) 8 8 8 8 8
FDBcc varia varia varia varia varia
FScc (false) 1 1 1 6 6
FScc (true) 1 1 1 6 6
FTRAPcc (presa) 10 10 10 10 10
FTRAPcc (non presa) 8 8 8 8 8
FNOP 8 8 8 8 8
FMOVEM 8 (1L+7) + 1 per reg prima mossa + 1 per reg fino a 16 reg

La FPU 68040 esegue l'aritmetica FP di base in hardware; le trascendentali, FMOVECR, e FDBcc/FScc/FTRAPcc sono emulate tramite il pacchetto M68040FPSP (i conteggi cicli sopra sono i timing osservabili dall'utente, inclusa l'emulazione). Sul 68060 lo stesso set è emulato tramite m68060f.lib.

Riepilogo 68040: perché è veloce

Il drammatico speedup del 68040 rispetto al 68020/68030 viene da tre cose: 1. Pipeline a 6 stadi — issue a singolo ciclo per la maggior parte delle op registro-registro 2. Branch cache — branch predetti correttamente sono 1 ciclo (penalty branch zero su hit) 3. FPU + MMU integrate — possono girare in parallelo con l'unità integer; le istruzioni FPU non bloccano la pipe integer

Quindi mentre il conteggio cicli caso migliore per un'op ALU è 1 ciclo su 68000/68010/68020/68030/68040/68060, il throughput medio in un loop stretto è: - 68000/010/020/030: ~4-8 IPC = ~0.1-0.25 IPC/watt - 68040: 1 IPC per op registro, più esecuzione FPU/MMU parallela - 68060: 2 IPC (dual-issue integer) quando l'accoppiamento delle istruzioni ha successo

Per MC68060UM §10, il 68060 sostiene 1.5–1.8 IPC per codice ben schedulato (vedi la colonna classificazione pipe 68060 sopra per quali istruzioni fanno dual-issue).

Conteggi cicli base 68060 (per MC68060UM Section 10)

Mnemonic Caso migliore (regs) Varianti long/word Note
ADD AND OR EOR SUB SUBI ADDI ANDI ORI EORI 1 ciclo stesso per tutte le dimensioni Dn+Dn = 1(0/0)
ADDQ SUBQ 1 ciclo stesso registro-a-registro
ADDA SUBA CMPA MOVEA 1 ciclo stesso
CMP CMPI CMPA 1 ciclo stesso
MOVE 1 ciclo (1(0/0) per reg-a-reg) MOVE.L con memoria aggiunge 0-1 cicli
MOVEQ 1 ciclo
MULS.W MULU.W 2 cicli (1(1/0)) moltiplicazione word
MULS.L MULU.L 2 cicli (1(1/0)) moltiplicazione long (non-wide)
MULS.L wide MULU.L wide 38+ cicli emulata su 68060 risultato 64 bit
DIVS.W DIVU.W ≤22 cicli (variabile) 1(1/0) base + variabile divisione word, condizionale
DIVS.L DIVU.L 38 cicli (1(1/0) base + 37) divisione long (non-wide)
DIVSL.L DIVUL.L emulata (m68060.lib) output 64 bit
NEG NOT NEGX 1 ciclo 1(0/0) per reg
CLR 1 ciclo 1(0/0) per reg
TST 1 ciclo 1(0/0) per reg
EXT.W EXT.L 1 ciclo
EXTB.L 1 ciclo 68020+
SWAP 1 ciclo
ASL ASR LSL LSR 1+3n (n=conteggio shift) fino a 8 cicli per shift registro
ROL ROR ROXL ROXR 1+3n fino a 8 cicli
BCHG BCLR BSET BTST (registro) 1-3 cicli destinazione memoria aggiunge
Bcc (predetta) 1 ciclo (dual-issue)
Bcc (non predetta) 3-5 cicli
BRA BSR 3-4 cicli
JMP (An) 1 ciclo
JSR (An) 3 cicli
RTS 4 cicli
RTR 7 cicli
JSR (d16,An) 4 cicli
LEA (An) 1 ciclo
LEA (d16,An) 2 cicli
PEA (An) 2 cicli
LINK 4 cicli
UNLK 3 cicli
NOP 1 ciclo
TRAP #n 14 cicli
STOP varia
RTE 8 cicli
RESET 519 cicli
MOVE16 18 cicli (1(1/1)) per trasferimento linea; 11(1/1) se lettura hit cache
TAS 1 ciclo (reg) / 17 cicli (memoria)
CHK CHK2 8+ cicli (trap se fuori limiti)
TRAPcc TRAPV 5+ cicli nativa su 68060 (1(0/0) per Table 10-24; gestione trap aggiunge cicli quando presa)
BCHG BSET BCLR (memoria) 4-7 cicli
BFCHG BFCLR BFSET BFTST 4-7 cicli bit-field 68020+
BFEXTS BFEXTU BFINS BFFFO 4-7 cicli 68020+
PACK UNPK 4-7 cicli nativa su 68060 (2(0/0) registro / 2(1/1) memoria per Table 10-24)
CMP2 4-7 cicli emulata su 68060
CAS 19 cicli (1(1/1)) 68020+
CAS2 emulata su 68060 solo 68020+
MOVEM 3-12 cicli a seconda del conteggio
MOVEC 6+ cicli supervisore 68010+
MOVES 8+ cicli supervisore 68010+
MOVE from SR 3 cicli (1(0/0)) 68000 non privilegiata; 68010+ privilegiata
MOVE to SR 4 cicli (1(0/0)) supervisore
MOVE to CCR 4 cicli (1(0/0))
MOVE from CCR 3 cicli (1(0/0))
MOVE USP 3 cicli supervisore
ANDI ORI EORI a SR/CCR 8-10 cicli supervisore
BKPT 10+ cicli (ack BKPT)
CINV CPUSH 4+ cicli per linea 68040+
PFLUSH 1 ciclo (NOP per MC68060UM §1.1.2.2) emulata, mantenuta dal 68030/68040
PLPA 4+ cicli solo 68060

I conteggi cicli per il 68060 in questa tabella sono derivati da MC68060UM Section 10.2 (Assunzioni di Timing: tutte le istruzioni e dati risiedono nella cache operandi, nessun bus error, nessuna traduzione MMU, ICache hit). Sono i cicli base che devono essere aggiunti ai tempi di calcolo dell'effective-address di Table 10-5 (tipicamente 0-3 cicli a seconda della modalità di indirizzamento). Il 68060 usa predizione di branch dinamica; i branch predetti correttamente sono 1 ciclo (dual-issue con l'istruzione successiva), i branch mispredetti sono 8-9 cicli.

Conteggi cicli FPU 68881/68882 (per datasheet MC68881/MC68882)

I conteggi cicli FPU dipendono dal formato dati, tipo sorgente/destinazione, e operazione. Valori tipici:

Operazione FPU 68881 (cicli tipici) 68882 (cicli tipici, ~1.5×)
FADD.S FADD.D FADD.X (reg, reg) 4 / 4 / 6 3 / 3 / 4
FSUB.S FSUB.D FSUB.X 4 / 4 / 6 3 / 3 / 4
FMUL.S FMUL.D FMUL.X 7 / 8 / 10 4 / 5 / 6
FDIV.S FDIV.D FDIV.X 36 / 70 / 102 24 / 47 / 68
FSQRT.S FSQRT.D FSQRT.X 70 / 70 / 102 47 / 47 / 68
FABS FNEG 3 2
FTST 3 2
FCMP 3 / 3 / 5 2 / 2 / 3
FMOVE.X <ea>,FPn 3 (reg) / 4 (mem) 2 / 3
FMOVE.P 12 8
FINT FINTRZ 55 (FPn→FPm, 68881); 82/74/80/78/892 per Int/S/D/X/P per Table 8-2 58 Totale (68882 FPn→FPm) per Table 8-3
FMOVECR 29 (FPn→FPm, 68881; nessun operando memoria) per Table 8-2 32 Totale (68882 FPn→FPm) per Table 8-3
FSIN FCOS FSQRT (trascendentali 68881/68882) 391 / 391 / 107 (68881 FPn→FPm); 1228 / 1228 / 944 Packed per Table 8-2 394 / 394 / 110 Totale (68882 FPn→FPm) per Table 8-3
FLOG2 FLOG10 FLOGN (68881/68882) 581 / 581 / 525 (68881 FPn→FPm); 1418 / 1418 / 1352 Packed per Table 8-2 584 / 584 / 528 Totale (68882 FPn→FPm) per Table 8-3
FSAVE / FRESTORE 22 / 25 14 / 17

Per le tabelle complete per-formato vedi MC68881 Technical Summary (alldatasheet 1985) e MC68882 Technical Summary (alldatasheet 1990), entrambi nell'archivio wiki.

Note semantiche

  • MOVE from SR — Sul 68000 è non privilegiata. Sul 68010 e successivi, è privilegiata. Il 68010 introdusse MOVE from CCR così che il software in modalità utente potesse leggere il byte dei condition-code senza leggere l'intero registro di stato.
  • RTE — Il formato dello stack frame differisce tra 68000 e 68010+. Il 68010 aggiunse un throwaway frame e un bus-cycle restart frame per il supporto memoria virtuale; la format word sullo stack dice all'handler quale tipo è presente.
  • TAS — Una forma in memoria usa il meccanismo read-modify-write del processore ed è intesa come primitiva di sincronizzazione atomica. Se sia sufficiente per un particolare sistema multiprocessore dipende anche dal design cache-coherency e bus della piattaforma; non affermare che TAS in cache sia intrinsecamente non-atomica sul 68040/68060.
  • CAS, CAS2, e TAS — Motorola classifica queste come istruzioni read-modify-write multiprocessore che forniscono aggiornamenti di memoria ininterrotti. Le regole di coerenza platform-specific rimangono rilevanti, ma le operazioni ISA stesse sono primitive di sincronizzazione atomica.
  • MOVE16 — Trasferisce un blocco allineato a 16 byte ed è disponibile sul MC68040 e MC68060. L'architettura fornisce forme con postincremento registro e forme absolute-long; usa le restrizioni esatte di operando e regole di allineamento dal manuale del processore target. Non generalizzare il comportamento di misalignment o i requisiti di modalità cache da un'implementazione all'altra senza verificare la definizione specifica 68040/68060.
  • PFLUSH/PTEST — su MC68060/MC68LC060 completi, la famiglia PFLUSH è nativa e opera sugli ATC on-die; PTEST non è implementata. PLPA fornisce l'helper di traduzione logico→fisico specifico del 68060. MC68EC060 non ha MMU e deve essere trattato separatamente.
  • Differenze interfaccia MMU — Il 68030 usa PMOVE per manipolare la sua MMU; il 68040 usa MOVEC più PFLUSH/PTEST. Il codice che mira alla MMU del 68030 deve essere portato.

Vedi anche


Fonti: Motorola, M68000 8-/16-/32-Bit Microprocessor User's Manual (MC68000UM), 1st printing 1992, Table 2-2 "Instruction Set Summary" (Sheets 1-4, pp. 2-11 → 2-14). Motorola, M68020 32-Bit Microprocessor User's Manual (MC68020UM), 1989, Table 1-2 "Instruction Set" (pp. 1-10 → 1-11); Chapter 1.4 "Instruction Set Overview"; Section 1.3 "Virtual Memory/Machine Concepts". Motorola, MC68030 User's Manual (MC68030UM), 1989/1990, Table 1-2 "Instruction Set" (pp. 1-12 → 1-13); Section 1.7 "The Memory Management Unit"; Section 1.9 "The Cache Memories". Motorola/Freescale, MC68040 User's Manual (MC68040UM), 1993, Table 1-4 "Instruction Set Summary" (pp. 1-14 → 1-21) e la lista istruzioni FPU a p. 1-16. Motorola/Freescale, M68060 User's Manual (MC68060UM), 1993, Table 1-3 "Instruction Set Summary" (pp. 1-16 → 1-21); Appendix C.2 "Unimplemented Integer Instructions" (p. C-4); Section 6.5.1 "Unimplemented Floating-Point Instructions" Table 6-11 (p. 6-19). Motorola, M68000 Family Reference Manual — sezione MC68881 Floating-Point Coprocessor (estratta dal FRM come inbox/mtgf88xv_MC68881UM.PDF, scansione 48 pagine, 1985); il file è image-only (nessun text layer), quindi l'ho OCR-izzato con tesseract 5.5.3 (binario nix-store) a 200 dpi via pdftoppm — estratto in raw/hardware/mc68881um.md per il capitolo 68881; cross-referenziato con il set di istruzioni MC68881 pubblicamente documentato e con MC68040UM Table 1-4 (che elenca il set di istruzioni 68882 completo). Motorola, MC68881/MC68882 Floating-Point Coprocessor User's Manual / materiale di riferimento floating-point M68000 Family; l'archivio locale contiene anche estratti OCR dei capitoli MC68881 e MC68882. I due coprocessori condividono lo stesso set di istruzioni visibile al programmatore; il MC68882 cambia principalmente le caratteristiche di implementazione/prestazioni. Differenze 68010 cross-referenziate contro MC68010UM (PDF image-only, contenuto verificato contro miglioramenti 68010 pubblicamente documentati). Raw: raw/hardware/mc68000um.md (estratto testo via pdftotext da MC68000UM 188pp); raw/hardware/mc68020um.md (estratto testo via pdftotext da MC68020UM 452pp); raw/hardware/mc68030um.md (estratto testo via pdftotext da MC68030UM 599pp); raw/hardware/mc68040um.md (estratto testo via pdftotext da MC68040UM 442pp); raw/hardware/mc68060um.md (estratto testo via pdftotext da MC68060UM 416pp); raw/hardware/mc68881um.md (OCR via tesseract 5.5.3 da inbox/mtgf88xv_MC68881UM.PDF scansione 48 pp a 200 dpi); raw/hardware/mc68882um.md (OCR via tesseract 5.5.3 da inbox/mtgfi0ge_MC68882UM.PDF scansione 45 pp a 200 dpi). Aggiornato: 2026-09-02