Computers Overview
Commodore PET
        PET ROMs
            IEC (for C64)
            Parts List
            User's Guide
Sinclair ZX80
Sinclair ZX81
BBC Micro
Commodore 64
Sinclair ZXSpectrum
Memotech MTX
Memotech CP/M
Tatung Einstein
Atari ST
Commodore Amiga
DEC 3000 AXP
Raspberry Pi



Commodore PET Projects - petSD+

petSD+ - Firmware

Last Firmware Update : Get it here


The firmware for petSD+ is currently in development and a "production" version has not yet been formally released. During this development phase, firmware updates are available on Nils' "nightlies" firmware page. I will endeavor to keep the table below up to date as new versions are made available, but for the most up to date status and copies of the binary files, please visit the "nightlies" download page.


For the latest - see below

Nils has just advised me that he no longer intends to devote any time to petSD+ / NODISKEMU firmware updates. The 2018-10-28 firmware file will not be updated, whether or not any bugs or other problems come to light.

Unfortunately, I do think that there are some issues with the latest firmware (that may have been present for some time), but Nils has not been able to duplicate the problems that I have reported or figure out what the cause might be. I think that he is pretty skeptical that my findings are real but in any event, he will no longer devote any time to working on the firmware. To some extent, I can see why Nils does not believe me; the strange thing is that the problems only seem to manifest themselves with certain MCUs, but having built and tested many petSD+ units, I am 100% certain that there is a (admittedly, perhaps hard to find) firmware issue somewhere.

With Nils no longer willing to work on the code, it is likely that these firmware issues will go unresolved. Hopefully, your petSD+ does exactly what you expected it to, in that case, even if your firmware revision is older than the latest, unless you need some fix or feature in a later firmware revision, I strongly suggest that you DO NOT UPDATE THE FIRMWARE in your petSD+. You may find that a later firmware revision brings problems that you did not expect. If you do decide to update the firmware, take a note of the installed firmware version BEFORE upgrading, that way, you should be able to revert to a working system if the update causes issues.

Nils has licensed NODISKEMU as "Open Source" and his Github Repository hosts the source files for the current and all previously released versions of NODISKEMU. Unfortunately, I do not have the skills to pick up responsibility for maintaining the firmware, so unless some other PET enthusiast with AVR programming skills is prepared to take up the mantle, then NODISKEMU is effectively DEAD, or at least, has a status of "unmaintained".


It is a real shame that this situation has arisen, petSD+ is a truly great piece of hardware for the PET, there are many petSD+ users who should be grateful to Nils for his time and effort in developing petSD+ and for supporting it over the past 8 years or so. Other, cheaper, SD card based solutions are available, but the ability for petSD+ to coexist with legacy disk drives and transfer files between them over the IEEE-488 bus is a real differentiator - I am sure that the vast majority of petSD+ users would agree!

Whilst I want to continue to make petSD+ available, I am becoming increasingly frustrated by the extended testing time that I need to put in before I am happy to send out petSD+ and with the number of MCU "failures" that I am seeing - currently about 50% of the MCUs that I install have one or more issues that mean that I have been reluctant to ship them - I have accumulated a large number of costly MCUs that I am unable to use. (Anybody want to buy a "nearly new" ATMEGA1284p-PU?)

The most common "failure" is that petSD+ does not start up properly on power-on. There is a simple work around for this, but, until now, I have not knowingly sent out units with this "fault", however, I am considering moving to a position where, if I identify this "fault" during testing, and only with the agreement of the purchaser, I may not consider this as a failure and may ship the unit anyway. Having to do a manual reset on power-on is not ideal, but is a minor inconvenience that users may be prepared to live with if it allows them to get hold of a petSD+ that they might otherwise not be able to. This would only be for external petSD+ units as manual reset of an internal unit would be just too awkward.

This needs more thought though . . . . It may be that I offer a small discount for users willing to accept a petSD+ with this minor inconvenience.

Update 29/08/2019 - CURRENT STATUS

The last release of NODISKEMU firmware was dated 2018-08-28 but it continues to be problematic, with around 50% of MCUs not able to start-up the application code without the user needing to use the simple work around mentioned above. I have reached the point where I can no longer tolerate the 50% failure rate of MCUs failing to run this firmware revision "out of the box".


Date Brief Description

Caution : It has been reported that, on some petSD+ units, the 2018-10-28 firmware revision has an issue with writing to the SD card; when the "save" command is used to write a file to the SD card, an empty file is created and the petSD+ resets.

This is currently being investigated, but in the meantime, With the petSD+ firmware no longer being maintained (see above), it may be wise to stick with the current firmware loaded on your petSD+.
2018-10-28 Bugfix : Backport Ingo Korb's sd2iec commits from 2015-2018
Corrects a bug that when writing to a file inside an image, the save would overwrite files inside the image other than the named file

Compile-time configuration option to disable the card detection switch for devices with defective switch

: lcd-i2c-menu: Always interpret '\n'
Other : Add support for full-step encoders like ALPS STEC12E08
Other : Move #include of a library from .h file to .c
Other : lcd-i2c-menu: First attempt of a Markdown README
Other : lcd-i2c-menu: Add support for m1284p and use it by default
Other : lcd-i2c-menu: Fix some compiler warnings
Other : lcd-i2c-menu: Use an easily available 20x04 display by default
Other : lcd-i2c-menu: Replace obsolete prog_char type
: lcd-i2c-menu: Rework broken Makefile
Other : lcd-i2c-menu: Make config-example the default
2018-05-16 Bugfix : Fix SPI speed during card init for petSD+
The divisors for slow and fast speed were mixed up so that the card was initialized way too fast. For some cards. Maybe. At least according to the specs from many years ago. In practice, this bug doesn't seem to be much of a problem, it was found just by random.

Bugfix : Fastloader-GEOS: Add missing track masking to 1581 reads
Fix a missing bit mask in the 1581-read path of load_geos() because GEOS already sends the READ command with bit 7 set if it only needs the link pointer of a sector, even though the bit is only checked in the TRANSMIT command.
2018-01-22 Bugfix : Fix unexpected behavior when setting contrast
The contrast setting menu reset the contrast to default value instead of starting the adjustment with the current value.
2017-11-22 Development : Enable all fast-loaders for petSD+
Development : Preparation for petSD+ Vesion 2
        - Rework LCD contrast/brightness menu
        - Store LCD contrast/brightness values in EEPROM
        - Rename/move some functions to match the name scheme
        - Switch between IEC and IEEE-488 in hardware on the petSD+ Rev. 2.x
               (This is done with a wire link inside the adapter cable on the older Rev. 1.x boards)
        - Show firmware version of PWM controller in diagnose screen
        - Press NEXT key on power-up for LCD contrast adjustment
        - Add LCD brightness and contrast adjustment to menu
        - Add firmware for PWM controller on petSD+ rev. 2.x boards
        - Fix EXTRAINCDIRS
               The creation of asmconfig.h failed because header files located in $(EXTRAINCDIRS)
               were not found.
        - Split board_init() into early and late_board_init()
        - Fix a remark (F_CPU was 18.432 MHz but is now 16 Mhz)
        - Rename lcd-i2c directory to lcd-i2c-menu
        - Enable DS3231 RTC for petSD+ boards
        - DS1307-3231: Add missing weak alias for rtc_init
        - Enable PCF8583 and DS-RTCs in most configurations
        - Merge CONFIG_RTC_DS1307 and CONFIG_RTC_DS3231
        - ds1307-3231: Auto-detect RTC type
Bugfix : Get rid of an unwarranted compiler warning
Other : Update copyright notices for 2017
2017-10-05 Bugfix : Fix debug output for old petSD (not relevant to petSD+)

Last stable release of NODISKEMU firmware ?
2017-07-12 Bugfix : Increase LCD delays to enable the usage of slower displays

Bugfix : Fix UART debugging for petSD+
The new setting is 38400 baud 8N1 regardless of whether the petSD+ runs at 8 MHz in IEC mode or 16 MHz in IEEE-488 mode
2017-07-11 Bugfix : Fix compilation when UART debug is enabled

Optimisation : (Compile time) Re-arrange tables used for IEC bus
Avoid defining of some tables for non-IEC bus targets like the old petSD, this removes some unused variables warnings. This change combines a series of #ifdef / #endif into a single #ifdef CONFIG_HAVE_IEC section.

Optimisation : (Compile time) Don't treat compiler warnings as errors
Some warnings aren't justified and hence shouldn't break the compilation, for example (with avr-gcc 7.1.0):
2017-04-06 Development : Same LCD delays for 8 and 16 MHz on petSD+
        - Same SPI speed for 8 and 16 MHz on petSD+
        - Remove remaining traces of former XS-1541 support
2017-04-05 Bugfix : Fix IEC fastloader for petSD+

The AVR fastloader code is hardcoded for 8 MHz and running the device at other speeds breaks the timing and thus the support of fastloaders.
But the device can not run at 8 MHz because that would be too slow to respond in time to the IEEE-488 ATN signal. To fix this, a CPU clock prescaler is introduced to run at 8 MHz when in IEC mode and at 16 MHz when in IEEE-488 mode.
Replace the crystal on your petSD+ with a 16 MHz type to benefit from this commit.
However, take great care not to damage the PCB when you exchange the crystal!

Development : Cleanup IEEE-488 code
Optimisation : Remove ATmega32 specific code
The code grew too large for this controller quite a while ago
Optimisation : Remove support of XS-1541
There are no XS-1541 with attached SD-card out in the wild and the poor men's variant without IEEE bus drivers is broken anyway. So just get rid of it and close #4
Optimisation : Remove more petSD-duo related code
This code was introduced when the IEEE-488 functions were replaced. It didn't come with a petSD-duo specific commit so it had to get removed separately.
Optimisation : Revert petSD-duo code
This commit reverts all petSD-duo related code, leaving it in the spsp branch for further reference. The petSD-duo is a failed hardware project so thereís no need to preserve its code in the master code branch.
2016-12-01 Development : Import Emily's SPSP functions
SPSP = Serial PET/Server Protocol (See petSD-duo)
2016-11-29 Development : Add preliminary support for petSD-duo
2016-11-07 Development : Allow more characters in FAT filenames
2016-09-06 Bugfix : Fix reading device address DIP switches on petSD+
2016-06-30 Bugfix : Revert to reliable diagnosis mode entry
2016-05-21 Bugfix : use 11 as default device address
If the device address couldnít get read back from the EEPROM memory, it was accidentally set to zero. This bugfix uses 11 as a new default value.
2016-04-07 Development : Add support for device address switches on petSD+
2016-03-15 New Feature : Added support for Commodore 64 Serial IEEE-488
Development : IEC support for petSD+ This commit turns your petSD+ into a IEC-only device.
Select IEC or IEEE-488 during runtime
Currently, only standard kernal functions work. Consider all fastloaders as broken.
2016-03-13 Development : Menu change from "Abort" to "Return to Menu"
2016-03-12 Bug Fix : Re-read configuration after IFC (interface clear)
: Add missing dummy LCD functions
: Allow dot ('.') within FAT filenames
2016-01-18 Optimisation : Preserve CMD compatibility for $=t on devices with IEC bus
Development : Make directories with timestamps 40 column friendly
Development : Enable larger debug hex dumps
2016-01-15 Bug Fix : LCD Menu - fixed LED usage while browsing files
2016-01-06 Development : LCD Menu - added directory and disk image browsing
      - Minor issue - When browsing, LED behavior is not as documented - fix in progress
      - Minor Issue - Does not stop browsing up from root, produced an error - fix in progress
Development : Removed M2I support
2015-12-10 Development : Set default file extension mode to 0
        - Old setting was 1 which created x00 files except for PRG.
        - New setting: never write x00 format files
2015-11-06 Bug Fix : LCD Menu - fixed determination of the day of week when setting time from LCD
Optimisation : Increase time-out for SD-Cards
2015-11-04 Development : LCD Menu - development for future disk image options - no user benefit
2015-10-28 Development : Code - compilation options, source file edits - no user benefit
Development : LCD Menu - development for future disk image options - no user benefit
2015-10-28 Development : LCD Menu - minor change to clock setting option text
2015-10-28 Optimisation : LCD Menu - reworked clock setting function
: LCD Menu - minor presentation changes for consistency between menus
Optimisation : LCD Menu - added labels to the status screen
2015-10-27 New Feature : LCD Menu - added "Set Clock" functions
Development : LCD Menu - minor presentation changes
2015-10-26 New Feature : LCD Menu - added "Store Settings" dialog
2015-10-26 New Feature : LCD Menu - added ability to change device number
2015-10-21 New Feature : First release of PREV/NEXT/SELECT Button Code
        - Pressing P, N or S button enters the LCD Menu
        - When LCD Menu is active, puts IEEE bus in "sleep" mode, indicated by solid Red LED
New Feature : LCD - Show disk status
Development : LCD - Added cursor
2015-10-12 Bug Fix : Be more tolerant for U command variants
Bug Fix : Ensure a proper DOS command channel dump
Bug Fix : IEEE-488: Fix friendly co-existence with other devices
Development : Update default directory header
2015-09-08 Bug Fix : Fix an ATN race condition
2015-08-28 Bug Fix : Fix preservation of petSD+'s device address
2015-08-25 Development : AVR system tick code, assembly version
2015-08-22 Optimisation : Speed up LCD display
2015-08-21 New Feature : Initial version of the LCD status display, a "splash screen" displays the software version and hardware name on startup and the Device ID when in normal operation.
2015-08-03 Bug Fix : LED brightness
2015-08-01 New Feature : Diagnostic functions, uses the LCD to report the status of the SD card detect and write protect switches, the values reported by the ADC for the various prev, next and select button combinations and the MCU fuse settings.
(earlier) Development : Versions prior to shipment of petSD+ hardware


mailto: Webmaster

 Terms & Conditions