1541 im FPGA/en

Aus LaborWiki
Version vom 9. September 2007, 23:34 Uhr von 83.135.128.24 (Diskussion)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.
Fpgafloppy 0.jpg

Finally I (tixiv) started a project with my Xilinx Spartan-3 FPGA Board. Jörg (our FPGA master) joined me instantly and so we started building a 1541 floppy drive (the drive of the good old C64) in an FPGA.

Fpgafloppy 1.jpg

The floppy is not some stupid piece of scrap metal, it is an autonomous microprocessor system controlled by a 6502 processor. Our idea is to implement it as true to the original as possible in VHDL, except that it will be reading data from a MMC card (which might fit all C64 games ever available), instead of a floppy disk.

At the moment of writing, the microprocessor system does boot, but we do not have a virtual floppy disk yet and the C64 is not yet connected.

More to come....

Short update: The floppy is quasi finished. The VHDL implementation works with all the fastloaders we tested (incl. Jiffydos and the Action Replay Modul). Next to the floppy's CPU (running at 1MHz) there is a second 6502 running at 16MHz in our design. This second CPU loads the data from the MMC card into the virtual disk for the floppy emulation.

At boot the controlling CPU uses a small bootloader to read its own firmware from the MMC. The firmware loads the floppy ROM from the memory card to the Spartan board's RAM. Now the virtual floppy is booted. Using a graphic LCD and buttons, you can select a D64 image for the 16MHz CPU to load to the virtual floppy disk, which is then readable for the emulated floppy.

There is one thing still missing: after writing to the virtual floppy disk there is no way to transfer the altered image back to the MMC card. Have to fix this in a quiet moment...