ZuluIDE™ is a hardware interface between IDE bus and SD cards. Currently it supports emulating ATAPI CD-ROM drives, Zip Drive 100, and a generic removable drive by providing access to image files stored on SD card.
There are three ways to specify drive type
1) In the zuluide.ini file under [IDE]
set Device = "[Type]"
CDROM
- CD-ROM driveZip100
- Iomega Zip Drive 100Removable
- Generic removable device
2) Use a image filename prefix of:Device = [type]
used the drive will default to CD-ROM.iso
image files, as well as .bin/.cue
files, are supported for the CD-ROM drive. The images are used alphabetically. .iso
, .bin/.cue
, and any extension on the ignored list. The images are used in alphabetic order.Any file on the ignored list will not be used as an device image.
.bin/.cue
imagesImage files in .bin/.cue
format that have only a single .bin
data file can be placed directly in root folder of the SD card.
Both the .bin
and .cue
should have the same name, and the name specified in .cue
is ignored.
Image files that have one .cue
file and multiple .bin
files should be placed in a subfolder.
The .bin
file is located by the name given in the .cue
text file.
The name of the folder is used as the name when switching images in alphabetical order.
Currently the only way to cycle to the next image for a removable device is the eject the medium via the operating system. This will load the next valid file in alphabetic order.
Non-simultaneous access to the contents of an inserted SD card can be enabled via the enable_usb_mass_storage
ini file directive.
See the USB Mass Storage wiki page for further details and limitations.
Log messages are stored in zululog.txt
, which is cleared on every boot.
Normally only basic initialization information is stored, but switching the DEBUG
DIP switch on will cause every IDE command to be logged, once the board is power cycled.
The indicator LED will normally report disk access. It also reports following status conditions:
In crashes the firmware will also attempt to save information into zuluerr.txt
.
The firmware supports hot-plug removal and reinsertion of SD card. The status led will blink continuously when card is not present, then blink once when card is reinserted successfully.
For RP2040-based boards, the USB programming uses .uf2
format file that can be copied to the virtual USB drive that shows up in USB bootloader mode, which is enabled with DIP switch.
ZuluIDE.bin
or ZuluIDEv1_0_2023-xxxxx.bin
.There are 3 DIP switches on board:
In addition to the DIP switches, there is a momentary-contact button, labeled BOOTLDR. If the bootloader button is held down at power-on, the board will not load its firmware, and will instead boot the in-ROM bootloader, and will wait for a .uf2 file to be copied to it via USB.
In hardware revisions before PCB Rev 2023e there is a fourth DIP switch for BOOTLDR instead of a button.
This codebase uses PlatformIO. To build run the command:
pio run
There are helper scripts in utils
folder for debugging the code using picoprobe:
utils/picoprobe_log.py
: Read picoprobe serial port at 1 Mbps baudrate to show the log from ZuluIDE.utils/upload_picoprobe.sh
: Upload firmware through SWD (requires openocd >= 0.12 installed on system)utils/run_gdb_picoprobe.sh
: Start log reader, openocd and command line gdb for debugging.In gdb, use load
to upload the firmware and run
to restart from beginning.
Theoretically you can also use the platformio pio debug
command, but currently it doesn't seem to work with picoprobe.
This firmware is original work developed by Rabbit Hole Computing™. It is closely related to ZuluSCSI, but starts from fresh beginnings.
The firmware code is licensed under the GPL version 3 or any later version.
The RP2040 platform utilizes a separate ICE5LP2K FPGA for IDE bus communication. Bitstream for the FPGA is provided in binary format and is licensed for free use and distribution on hardware produced by Rabbit Hole Computing™. Communication between the FPGA and the CPU uses QSPI interface documented in rp2040_fpga.h.
Any file that starts with zulu
is ignored
The following common compression extensions are ignored: ".tar", ".tgz", ".gz", ".bz2", ".tbz2", ".xz", ".zst", ".z", ".zip", ".zipx", ".rar", ".lzh", ".lha", ".lzo", ".lz4", ".arj", ".dmg", ".hqx", ".cpt", ".7z", ".s7z"
The following document extensions are ignored: ".cue", ".txt", ".rtf", ".md", ".nfo", ".pdf", ".doc"