Skip to content

SHARPENTIERS/MZ-SD2CMT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MZ-SD²CMT

SD card based CMT for MZ 80K series (MZ-80 K/K2/K2E/C, MZ-80 A, MZ-1200, MZ-700).

Parts Used

  1. Arduino MEGA
  2. SD card module
  3. 16x2 4-bit parallel LCD with 5 x Buttons or 128x32 I²C OLED
  4. KEYES IR remote

Examples of what I used:

  • an Arduino MEGA 2560 R3 ATMEGA 16U2: 71iRODIgxUL SL1500
  • a 0.91" I2C 128x32 OLED: 71b-NMspBIL SL1500
  • a 16x2 LCD with 5 buttons: 71By4b4xsRL SL1200
  • a KEYES IR remote: 61-sEwpOfmL SL1200
  • Dupont Wires to connect the Arduino to the SD card module and the MZ tape connector.
  • a LED to show transfer activity.

Installation

You need SdFat, CrystalLiquid, IRremote and SSD1306Ascii libraries: they are available from Arduino IDE.

Wiring

Arduino MEGA Pins:

Name Number Direction Description
A0 <- BUTTON (UP/DOWN/LEFT/RIGHT/SELECT)
A1 <- IR remote data line
. 4 -> LCD D4
. 5 -> LCD D5
. 6 -> LCD D6
. 7 -> LCD D7
. 8 -> LCD RESET
. 9 -> LCD ENABLE
RX3 15 <- MZCMT WRITE
TX2 16 <- MZCMT MOTOR
OC3B 2 -> MZCMT READ
TX1 18 -> MZCMT SENSE
RX1 19 -> MZCMT LED
SDA 20 -> OLED SDA (I²C)
SCL 21 -> OLED SCK (I²C)
. 50 <- SD MISO (SD Card MISO PIN)
. 51 -> SD MOSI (SD Card MOSI PIN)
. 52 -> SD SCK (SD Card SCK PIN)
. 53 -> SD SS (SD Card slave select)

LCD Pins:

Name Direction Connected to
D4 <- ARDUINO #4
D5 <- ARDUINO #5
D6 <- ARDUINO #6
D7 <- ARDUINO #7
RESET <- ARDUINO #8
VCC <- ARDUINO 5v
GND <- ARDUINO GND

OLED Pins:

Name Direction Connected to
SDA <- ARDUINO #20
SCK <- ARDUINO #21
VCC <- ARDUINO 5v
GND <- ARDUINO GND

IR RECV Pins:

Name Direction Connected to
DATA <- ARDUINO #55
VCC <- ARDUINO 5v
GND <- ARDUINO GND

SD CARD Pins:

Name Direction Connected to
GND <- ARDUINO GND
3.3V <- NC
5V <- ARDUINO 5V
MISO -> ARDUINO #50
MOSI <- ARDUINO #51
SCK <- ARDUINO #52
SDCS <- ARDUINO #53

LED Pins:

Name Direction Connected to
GND <- ARDUINO GND
5V <- ARDUINO #19

Usage

Wire up as above, and program the Arduino using the IDE.

The following picture is showing how to connect Arduino to 8255:
mz-700 - 8255 <-> Arduino Note: SDI/SDO/SSI/SSO are signals used for Ultra-fast mode.

  • SDI: Serial Data Input, connected to WRITE. Also used to acknowledge Arduino to set the next data bit when MZ reads.
  • SDO: Serial Data Output, connected to READ. Also used to acknowledge MZ to set the next data bit when Arduino reads.
  • SSI: Serial Synchronisation Input, connected to MOTOR. Only used when MZ writes.
  • SSO: Serial Synchronisation Output, connected to SENSE. Only used when MZ reads.

Drop some MZF/M12/MZT files onto a FAT32 formatted SD card, plug it into the mz-sd²cmt, and power on.

An Ultra-fast mode is provided with MZF-like files to allow around 20000 baud transfer. You must press RIGHT button to toggle Ultra-fast mode (disabled by default).

The following picture is showing the ultra-fast protocol when MZ reads: ultra-fast mode

Legend: * means the MZ reads the READ bit and >< means Arduino is setting the next READ bit. Notes:

  • CS is also named SSO.
  • PC5 is connected to SDO as the current bit data when MZ reads.
  • PC1 is connected to SDI as a read acknowledge sent by MZ.
  • PC4 is ignored by Arduino when MZ reads.

Old usage

Drop some LEP or WAV files (converted MZF Files through MZF2LEP tool) onto a FAT32 formatted SD card, plug it into the mz-sd²cmt, and power on.

Tool mzf2lep can convert a MZF/MZT/M12 file into a LEP and/or WAV file in five ways:

  • conventional tape data (2 header blocks followed by 2 data blocks) at 1200 baud
  • fast tape data (shorter gaps, 1 header block followed by a 1 data block)
  • turbo x2 tape data (first turbo loader as a fast tape data then 1 data block read twice as fast)
  • turbo x3 tape data (first turbo loader as a fast tape data then 1 data block read trice as fast)
  • turbo x4 tape data (first turbo loader as a fast tape data then 1 data block read four times as fast)

Note that WAV files have a limitation: 8-bit mono channel. The frequency can be any, included the usual 44.1KHz and probably even 48KHz. Yes, it works on a 16MHz AVR and probably even on a 8MHz AVR too.

Issues

LEP file is supported. Suffixes .LEP and .L16 are for time resolution 16µs and .L50 for 50µs (As the original LEP from SDLEP-READER - Daniel Coulon). The only interest is for a program needing to read severals blocks. Maybe the same thing can be handled through a MZT file (with multiple data blocks) by listening to MOTOR signal to separate block readings. But unlike LEP, there is no way to say whether the next block is a header block or a data block.

Some programs are a set of blocks in the tape: the first program will read the rest in one or several blocks. Right now, MZF, M12 and MZT don't handle them correctly (no indication whether the next block is a header or a data so you can emit the right prolog). Maybe defining a new binary file with those indication may help to allow reading multiple data.

Turbo x2, x3 and x4 are available through WAV/LEP files built by MZF2LEP tool. However, Turbo x4 may not work perfectly with big program to load.

About

SD card based CMT for MZ 80K series

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors