# Minimig

Il Minimig (abbreviazione di Mini Amiga) è una reimplementazione open source di un Amiga 500 tramite FPGA.

## Storia

La progettazione del Minimig fu iniziata segretamente nel gennaio 2005 come proof-of-concept dall'ingegnere olandese Dennis van Weeren. Il primo prototipo del Minimig è basato sullo Spartan-3 Starter Kit della Xilinx; nell'FPGA è sintetizzato l'intero chipset Amiga OCS. Due circuiti stampati sono collegati alle porte di espansione del kit FPGA: il primo contiene una versione a 3,3V della CPU MC68000, mentre il secondo contiene uno slot MMC con un microcontrollore PIC con funzione di controller del disco rigido, in grado di supportare il filesystem FAT e di effettuare la decodifica al volo di file ADF (Amiga Disk Format).
Il prototipo venne mostrato ad un meeting Amiga; nonostante qualche bug, è in grado di caricare la maggior parte dei programmi per Amiga. Van Weeren ha preferito il verilog al VHDL ed ha usato un PC con il software Webpack della Xilinx per lo sviluppo.
Il codice sorgente e lo schema elettrico vennero rilasciati su licenza GPL versione 3 il 25 luglio 2007. Il 23 dicembre 2007 ACube Systems ha annunciato che avrebbe venduto le schede assemblate del Minimig v1.1.

## Caratteristiche

* Eseguire software specifico per Amiga, per convertire file verso formati e piattaforme più recenti.
* Eseguire software disponibile soltanto su Amiga.
* Eseguire videogiochi per Amiga.
* Acquisire esperienza di sviluppo su FPGA usando il Verilog.
* Permettere la creazione di nuovo software che utilizzi le nuove caratteristiche del dispositivo, pur mantenendo la piena compatibilità con gli Amiga.

## Hardware
### Piattaforma

Alla rev1.0 del Minimig:
* Xilinx Spartan-3 FPGA (XC3S400-4PQ208C) da 400k porte, usato all'82%.
* Freescale MC68SEC000, 3,3V, a 7,09379 MHz. Tra le incompatibilità: non c'è il clock 'È, l'istruzione MOVE sr,<EA> è privilegiata e manca una vera istruzione che la sostituisca. Comunque, questo non sembra avere impatti su nessun programma.
* I bus ChipRAM e FastRAM di Amiga sono riuniti in un unico bus sincrono cloccato a 7,09379 MHz.
* 2 MB di SRAM asincrona da 70 ns, organizzata come 2 banchi di 524288 parole di 16 bit.
* MCU PIC 18LF252-I/SP (Un'alternativa sarebbe l'Atmel AVR), che implementa un filesystem FAT16 e gestisce il caricamento della configurazione dell'FPGA e del kickstart. Simula un floppy per l'Amiga, codificando al volo da file .ADF.
* Schede di memoria flash di tipo MMC per il caricamento della configurazione dell'FPGA, del kickstart e del software per il computer emulato.
* 3× LED per visualizzare l'attività del disco, l'alimentazione principale e l'accensione dell'Amiga. Come su un vero Amiga, quest'ultimo LED cambia intensità per mostrare lo stato del filtro audio, che però non è implementato.
* Il convertitore digitale-analogico è costituito da 4 resistenze per ognuno dei colori rosso, verde, blu (4 bit/colore) e uscita sul connettore VGA.
* Audio ottenuto da un convertitore dithering sigma-delta a 8 bit con filtro di 2º ordine.
* Alimentazione principale di +5V DC (~200 mA).

### Porte

* 4 GPIO (General Purpose Input/Output) dall'FPGA
* JTAG per la programmazione dei chip (TMS, TDI, TDO, TCK)
* Una porta seriale RS232
* 2 Joystick di tipo Atari 2600 DE9M.
* Una porta DE15F VGA (può emettere segnali compatibili PAL per la connessione ad una SCART).
* Uno slot MMC per schede di memoria flash.
* Connettori PS/2 per Tastiera + Mouse
* Porta audio jack da 3,5 mm
* Porta d'alimentazione plug da 2,1mm, +5V DC.

### Implementazione

* CPU Motorola 68000.
* Video OCS/ECS, PAL & NTSC.
* 512 kB di SRAM per il Kickstart usata come ROM.
* 512 kB SRAM Slow RAM.
* 1024 kB SRAM Chip RAM.
* Sistema On-screen display (OSD) per la selezione delle immagini dei dischi in formato ADF (Amiga Disk File) dalla scheda MMC tramite tastiera o joystick.

## Problemi

* Per ragioni di copyright, è necessaria una copia del kickstart di un vero Amiga 500. Ne esiste anche una versione libera, la cui compatibilità non è però totale.
* Il motore degli sprite soffre ancora di bug.
* Il firmware attuale gestisce solo una directory e nomi di file 8.3.

## Strumenti usati per po sviluppo

* Hardware: Shuttle barebone, Prescott Pentium 4 3 GHz, 1 GiB RAM;
* Software: Xilinx Webpack versione 6.3.03i (2007-07-22 9.1).

## Futuro

* Gli sviluppi possibili includono una CPU più veloce, il chipset ECS, così come quello AGA, il supporto per gli hard disk, per ethernet, un mini core RISC per le funzioni avanzate di AROS, eccetera.
* L'uso di un kickstart libero (e.g. AROS).
* Una versione dotata di interfaccia di rete eliminerebbe la necessità di usare più memorie flash.

## Aggiornamenti
### Supporto Read/Write

Il 3 marzo 2008 un nuovo core FPGA ha reso disponibile il supporto read/write, così come alcune migliorie grafiche.

### Scheda con controller ARM

Il 22 dicembre 2008 è stata annunciata una scheda sostitutiva che si installa nello zoccolo del controller PIC (MCU). Questa scheda implementa un harddrive, 4 floppy disk e il supporto alla scrittura. Il core FPGA è lo stesso per il firmware del nuovo ARM e del PIC, ma solo l'ARM è dotato di risorse sufficienti per supportare quattro drive; il PIC ne supporta solo due. L'aggiornamento consente anche di incrementare il clock della CPU da 7,09 a 49,63 MHz con una cache da zero waitstate di 4KB, ma richiede un core FPGA per l'implementazione effettiva (che funziona con i chip 68SEC000 da 16 MHz).
Il supporto per l'harddrive è implementato come interfaccia parallel ATA GAYLE virtuale in stile A600/A1200. Con una piccola modifica hardware è possibile ottenere fino a 551 KB/s, altrimenti la velocità massima è di ~300 KB/s.

### 2 MB di RAM aggiuntiva

Saldando un altro gruppo di chip SRAM sul dorso quelli esistenti è possibile ottenere 4 MB di RAM complessivi.

### Supporto AGA

Il core del Minimig è stato aggiornato con il supporto AGA ed esteso per supportare almeno 50 MB di memoria Chip sul prototipo Replay progettato da Mike Johnson all'FPGA Arcade.

## Progetti simili

Illuwatar, un progettista hardware privato in Svezia, ha implementato una versione Mini-ITX del Minimig su licenza Open Source design License. In questa versione, di dimensioni 17 cm x 17 cm, le porte di connessione sono state spostate sul retro della scheda conformemente alle specifiche Mini-ITX.
L'11-10-2006 Jens Schönfeld della Individual Computers ha rivelato che quest'ultima stava lavorando già da un anno ad un progetto commerciale di Amiga in un FPGA, chiamato "Clone A", simile al Minimig. A differenza del Minimig, il Clone-A è stato sviluppato da un team di tre persone, dotato di un potente analizzatore logico. Il sistema farà uso di cloni dei chip di Amiga (CIA, Paula, Gary, Agnus e Denise), mentre la CPU sarà l'originale di Motorola. I chip finali implementeranno anche l'architettura AGA ed una porta parallela, utilizzabile per i giochi a quattro giocatori.
NatAmi è un progetto simile, avente l'obiettivo di creare un Amiga di fascia alta, ma più orientato alla compatibilità con l'architettura AGA e alle caratteristiche aggiuntive del successore dell'A4000. Le caratteristiche del NatAmi includono chipram veloce, design a 32 bit con velocità del bus più alte, PCI, Floppy, ATA MC68030 (nel prototipo) ed espansione RAM.