MMC2IEC

Historie / Hintergründe

Statt einer Floppy 1541, welche doch auch irgendwann mal das Zeitliche segnen wird, könnte man auch ein etwas moderneres und dabei deutlich kleineres Speichermedium verwenden. Aus dieser Idee entstand die 1541-III von Jan Derogee, welche mit einem PIC-Microcontroller arbeitet. Pyrofer hatte bereits mit dem MMieC Projekt etwas ähnliches geschaffen. Als dann der C64DTV auf den Markt kam, hat sich Pyrofer zusammen mit Jussi Saily daran gemacht, die 1541-III und das MMieC umzubauen, damit das Resultat am C64DTV betrieben werden kann. Daraus entstand die 1541-III DTV - immer noch mit einem PIC. Lars Pontoppidan hat dann die 1541-III DTV für seinen C64DTV Mod auf einen AVR chip umgezogen - einen ATMega32. So entstand sein MMC2IEC device (Schema). Er hat dann auch noch eine Version erstellt, welche wiederum an den C64 angeschlossen werden konnte (Schema) - damit hat sich der Kreis zur ursprünglichen 1541-II wieder geschlossen. Das letzte, was Lars gebaut hat ist en MMC2IEC, welches sowohl am C64DTV als auch am C64 arbeitet - diese hat er auch zum Verkauf angeboten (Schema der Rev2). Basierend auf den Schematics von Lars gab es dann im Forum64 einige Nachbauten für den C64DTV. Im Gegensatz zu Lars verwendete mancher dabei nicht den ATMega32 als TQFP (44pin SMD) sondern als DIP (40pin), da dieser deutlich einfacher zu handhaben ist. AndyDTV benutzte dabei die L-Variante (3.3V) für seinen Nachbau. Im Gegensatz dazu verwendete Shadowolf zwar den TQFP, änderte aber ein paar Ports.

Mein Nachbau

Da mir der Nachbau mit SMD nicht so liegt, habe ich mich für einen Nachbau auf Lochraster entschieden. Programmiert habe ich mit dem Pollin Eval. Board. Hier der mmc2iec.zip HEX-File.

Hier die fuses Einstellungen für Ponyprog:

Hier mein Lochrasterschaltplan auf Basis von Antabaka:

Anstatt dem LF33 3,3V Regler kann man auch z.B LP2950 3V Regler verwenden.. Der LF33 im TO-220 Gehäuse ist halt ziemlich groß.

Hier ein Photo des fertigen Aufbaus (SD-Slot wird noch mit Heißkleber fixiert) Wie man sieht, habe ich die 3 IEC Leitungen direkt an der rechten Seite des ATmega32 angeschlossen. Die beiden 560 Ohm Widerstände zu den LED's sind unterhalb des ATmega im Sockel 'verstaut':

Hier ein weiterer Aufbau in einen USB Multicard Reader (Reichelt 4,30€).
Usb Reader 'zerlegt' und SD-Slot abgelötet:

Aufbau auf Lochraster. Noch ohne ATmega32. Man sieht die beiden im Sockel liegenden 560 Ohm Widerstände für die LED's:

Hier im Gehäuseboden eingepasst:

Hier im Betrieb. (In den Deckel mußte ein Loch gedrehmelt werden für den 3,3V Regler im TO-220 Gehäuse ;-) ):

Bildschirmmeldungen:

Tips und Hinweise:

Ich habe SD Card Detect und SD Write Protect fest auf GND gelegt. Falls der verwendete SD Slot entsprechende Signale 
anbietet, kann man diese aber natürlich auch nutzen. Dann sind die PIN's entsprechend mit den Slot-Anschlüssen zu 
verbinden und die GND Verbindung zu trennen!

+5V kann man z.B am Tapeport entnehmen:

 
  1  2  3  4  5  6
  === |===========
  A  B  C  D  E  F 



Wenn man von hinten auf den Stecker schaut.
Der untere Kontakt (A-F) ist mit dem jeweils oberen verbunden (A-1, B-2.. F-6)

+5V ist an B/2
GND ist an A/1

---

IEC-Buchse (in der Mitte ist Pin 6)

       
    5 o       o 1
          6o
    4 o       o 2
          3o


3 - ATN
4 - CLK
5 - DATA

---

SD-Card
  
+------------------------
|8
|7 - Data OUT
|6 - GND
|5 - CLK
|4 - +3,3V
|3 - GND
|2 - Data IN
|1 - Select
\
 \ 9
  ------------------------


---

LED
Das längere Bein ist + (Anode).


Befehle:
Initialisieren gibt:
LOAD "<<",8
SEARCHING FOR <<
LOADING
READY
und die rote+grüne LED sind kurz an (ca. 0,5s)..?

USAGE GUIDE:
------------
The MMC2IEC device implements accessing FAT16 filesystems on MMC or SD
flash media. The CBM IEC protocol is implemented and the kernel load and save
routines on the C64 works, loading from either PRG, D64 or T64 files, and
saving only to PRG type files in FAT.

Selecting directories and images is possible through LOAD"xxx" commands
issued on the CBM.

This is a quick overview of the commands, say MMC2IEC is IEC device 8:
 
  LOAD"<<",8      Reset SD card state. Do this if the SD card is exchanged.
                  Read < as the petscii back-arrow.
                  If SDCARD_DETECT signals is available, this operation is
                  rarely needed.
                 
In FAT mode: (the default mode)

  LOAD"$",8            Gets directory listing, equivalent to LOAD".",8
  LOAD"gamesdir",8     Enter the "gamesdir" directory, and get listing.
  LOAD"..",8           Up one directory and get directory listing.
  LOAD"tetris.prg",8   Loads the "tetris.prg" program file.
  SAVE"example.prg",8  Save into "example.prg" which is a FAT file.
  LOAD"disk.d64",8     Loads the disk.d64 image and enters D64 mode.
  LOAD"tape.t64",8     Loads the tape.t64 image and enters T64 mode.

In D64 mode:

  Load "$", "*", wildcards, filenames works (almost) as espected on a 1541.
  LOAD"<",8            (back-arrow). Escape D64 mode, and back to FAT mode.
  SAVE"abc",8          Fools the CBM, but has no effect. Saves in D64 are
                       not implemented

In T64 mode:

  Load "$", "*", wildcards, filenames works as if it was a D64.
  LOAD"<",8            (back-arrow). Escape T64 mode, and back to FAT mode.
  SAVE"abc",8          Fools the CBM, but has no effect.


Now Save-With-Replace works with SAVE"@:FILE", which will erase FILE first if it did exist.
I have not implemented the Save-With-Replace bug, though ;)

The "N:" operation initializes a new special disk "image", which is not readonly! I came up a with new file format for
this read/write disk simulation, the .M2I file. The file is just an index with 16 char petscii filenames, the FAT
filesystem is still utilized for file management.

When the M2I file is open, scratch and rename works, even with wildcards.

M2I files can also be entered with LOAD"FILE.M2I" and exited with LOAD"?", just like D64 and T64. It should be noted 
that scratch and rename also works in FAT mode, but not with wildcards.

The M2I disks has no limit on size and can be utilized for emulating multidisk games.

Finally, a little tip I discovered. If you want to change directory or mode with MMC2IEC, without loading and messing up
what's in memory, use an OPEN operation instead of LOAD. For instance, to go to parent directory:

OPEN 15,8,0,"..":CLOSE 15

Auslesen Fehlerkanal:
10 OPEN15,8,15:INPUT#15,A$,B$,C$,D$
20 CLOSE15
30 PRINT A$,B$,C$,D$
RUN

Sollte:
00    OK    00    00
geben.
Nach dem ersten Einschalten:
73    MMC2IEC DOS V0.8     00    00

Fehler:
74    DRIVE NOT READY        00    00


Neue Firmware sd2iec

Unseen aus dem forum64 hat eine neue Firmware entwickelt! Diese ist Jiffydos Kompatibel und unterstützt auch Turboload. Allerdings muß dazu ein Quartz und 2 dazu passende Kondensatoren bestückt werden (XTAL1+XTAL2) und die Fuses entsprechen programmiert werden (Low=0xAF; High=0xD9)!
Das ZIP Archive: sd2iec.zip enthält sd2iec.hex Version 0.5.1, turbo.prg+turbo2.prg (Turboload Versionen 2.1+2.2) und speed.prg (Speedtest - sys2085 = ohne Format!), und weitere Informationen..

Die jeweils aktuelle Firmware stellt Unseen hier ins Netz:
http://www.sd2iec.de/
Darauf achten, das die *lp für die LarsP Pinbelegung verwendet wird!

Im Unterschied zur orig. LarsP Firmware, erfolgt der Wechsel in ein Unterverzeichnis/M2I/D64 so:
open1,8,15,"CD:[name]":close1 und nicht über load...!!

Lochrasteraufbau mit Quartz:

Speed-Hardcopy:


Eagle-Layout

In 2009 habe ich es dann endlich mal geschafft, den LarsP Lochrasteraufbau mit Quarz und Schaltern in ein Eagle Layout zu packen. Aus diesem ist dann auch eine Sammelbestellung im forum64 entstanden.

mmc2iec_eagle.zip Eagle ZIP Archive.

Hier mit der eagle3d Erweiterung gerendert:

Und hier die erste Prototypenplatine (www.platinenbelichter.de):

Da die Platine keine Durchkontaktierungen und keinen Loetstoplack hat,
muss man teilweise oben und unten an den Bauteilen löten!

Hier hier die erste der Blue Edition Sammelauflage aus dem forum64:

Zuerst immer den SD Slot bestücken und alle Kontakte (card Detect und Write Protect) mit einem Multimeter auf guten Kontakt durchmessen! Erst danach die restlichen Bauteile. Achtung: Entweder den 3V Regler bestücken (besser!) ODER die beiden 1N4001 Dioden - NICHT beides!