back to buchty.net
Casiorama
back to main page

The Casio FZ-1 Disk Format
Trying to reach me?
I recently got a defective FZ-1. After having it repaired I was happily browsing the web searching for samples and disks - and I found many. Unfortunately, they are almost all in a format called .fzf, to load them into the FZ-1 you need a PC plus MIDI interface or a special cable hooked to LPT.

As it's nice to have tools like fzdump for exchanging single FZ-1 files over the internet - wouldn't it be much nicer to directly read & write its disks with your PC? The disk format isn't hard to understand: It took me not more than a rainy saturday to figure out the following...

Sad but true... These days one really calls for spam when publishing an email address on a website. But what the heck.

rainer@buchty.net

If you expect an answer please send plain text emails. HTML-formatted mails will be dumped automatically.

Disk Details

What everyone easily could find out is the main disk layout of the FZ-1, which organizes them as follows:
  • 80 tracks
  • 2 sides
  • 8 sectors/track
  • 1024 bytes/sector
  • sector interlave 3:1
Internally, disks are accessed by sector numbers which range from 0 to 1279. This individual sector number is calculated as
  • secno = track#*16+side#*8+sector#


Now we know to access how to access the disk, but how is the data on it organized?

Of the 1280 possible sectors the first three serve special tasks which are

  • disk name and sector allocation table (secno #1)
  • directory of the first 32 files (secno #2)
  • directory of the second 32 files (secno #3)
Each file will consist of an introducing Data Information Sector which allows a single file to be scattered into 255 pieces of variable length (within 1kB boundaries, of course) by indexing each chunk of data by first and last sector of a consecutive data block. The missing 4 bytes (1024-255*4) are used as offset for the first data block and the overall data size. Thus, the minimum file size is 2048 bytes: 1024 bytes for indexing, 1024 bytes of data. If a data chunk is smaller than 1024bytes it is padded up with 0x00.

Confused? Let's view the details:
 

Byte Address Function Value
 0x000-0x00b  Disk Name  ASCII characters 
 0x00c/0x00d  unused  0x0000
 0x00e/0x00f  Disk Name tag  0x0200
 0x010-0x01b  Work Pass (Copy of Disk Name)  ASCII characters
 0x01c-0x01f  unused  0x00
 0x020-0x07f  spare  0x00
 0x080-0x0cf  Sector Allocation Table of tracks 1-80 
  • MSB represents side 1
  • LSB represents side 0
  • bits 7-0 represent sectors 8-1 (1=occupied) 
 word
 0x0d0-0x11f  reserved  0x00
 0x120-0x3ff   spare  0xff
Disk Name & Sector Availability Map (Sector 1)
 
Byte Address Function Value
 0x000-0x00b File Name  ASCII characters
 0x00c File Type   0x00 = full dump
  0x01 = voice dump
  0x02 = bank dump
  0x03 = effects dump
  0x04 = sequencer data(*)
  0x05 = external program
 0x00d Disk Number(*)   0x00/0x01
 0x00e/0x00f Data Information Sector   sector number (0-1279)
 0x010-0x3ff  31 more directory entries  
Directory Entry (Sectors 2 and 3)
Information marked by (*) provided by Jeff McClintock
 
Byte Address Function Value
 0x000/0x001  Start Sector Number of data fragment #1   sector number (0-1279) 
 0x002/0x003  End Sector Number of data fragment #2  sector number (0-1279)
 0x004-0x3f9  253 more data fragment pointers
 0x3fa/0x3fb  Number of banks in file  word
 0x3fc/0x3fd  Number of voices in file  word
 0x3fe/0x3ff   Number of PCM data blocks  word
 Data Information Sector
 
Byte Address Function Format
 0x000-0x3ff   Data  OS Data Structures
 padded with 0x00 if smaller than 1kB 
Data Sector