|
Commodore PET Projects
- petSD+ |
petSD+ - Firmware
Last Firmware Update :
Get it here
Revision History here
July 8th 2019 :
IMPORTANT UPDATE ON NODISKEMU FIRMWARE STATUS
Please read before updating the firmware in your
petSD+
Overview
The petSD+ NODISKEMU firmware is based on
sd2iec, created by Ingo Korb (et
al.), the most common use for this firmware is in the emulation of a
Commodore
1541 disk drive for the
Commodore 64
computer, but Nils Eilers has added support for the IEEE-488
disk drives used with the PET/CBM range.
sd2iec is open source, released under the
GNU GPL license and is available from the
Git
repository here. Unfortunately,
there isn't a manual for sd2iec, although some information is
available from the
README file in the archive and some more "user friendly"
information has been posted to the
sd2iec page on the
C64 wiki.
Quoting from the wiki, some features relevant to the PET are
:
-
D64/D71/D80/D81/D82
image file support
- PRG/P00
etc. support
- Limited
REL
support
- Supports FAT long file names
- Supports FAT12/FAT16/FAT32 formatted SD and SDHC cards
- Supports most typical IEC functions (LOAD, SAVE, OPEN,
GET, PUT, CLOSE, ...)
- Real Time Clock (RTC) support
This page describes how to load petSD+ firmware onto a blank
MCU, i.e., one that does not already contain a compatible copy
of the sd2iec boot-loader. Upgrading an operational petSD+ with
updated firmware is a trivial task - jump to the end of this
page for details.
Implementation for petSD+
Based on discussion with Ingo Korb, for petSD+, Nils has
created a fork of the sd2iec firmware called NODISKEMU with its
own
repository on Github. As of June 2015, this branch of
sd2iec is still under development, it includes the enhanced
IEEE-488 routines and D80 / D82 support from Nils'
petSDduo firmware ("emily")
but at this point, does not use the LCD display (work on this is in progress).
A comparison of the features of the petSD+ NODISKEMU firmware
with those of alternative PET SD card solutions can be found on
my firmware comparison page
(currently a "work in progress").
Loading NODISKEMU to petSD+
This is made up of two distinct operations :
- Program the AVR with a boot-loader
- Place a copy of the NODISKEMU on SD card
The sd2iec Boot-loader
petSD+ uses the boot-loader that is part of the "standard"
sd2iec project. Each time that the device is powered up, the
boot-loader scans the root directory of the SD card, looking for
a copy of the binary file for the application.
The files in the root directory are read, if the file size
matches the expected length of a firmware binary and the file
signature (which includes version, checksum, and firmware type)
is valid, it can potentially be used to upgrade the firmware in
the AVR. If the firmware file is compatible, then, provided that
the version number is 0, or is greater than that currently
installed in the AVR, the flash is reprogrammed with the updated
firmware.
If an updated firmware file is not present, the system
attempts to run the code currently in the flash.
Step-by-Step Instructions - courtesy of
Nils Eilers
NB : Later versions of petSD+ (firmware
versions 2017/04/05 and later) include support for the
JiffyDOS
Fast Loader on IEC devices. This functionality requires a 16MHz
oscillator, rather then the original 18.432MHz, and a custom
version of the boot-loader is needed to work at this clock
frequency.
Download the boot-loader from its
official download page (Original petSD+ with
18.432 MHz oscillator) |
http://sd2iec.de/bootloader/ |
|
|
Download the latest "newboot-binaries"
file |
Version 0.4.1 or greater is required |
e.g.,
newboot-0.4.1-binaries.zip |
Unzip the file and extract the required hex file |
for
petSD+, the file is
newboot-0.4.1-petSD+-m1284p.hex |
(or later) |
OR
Download the boot-loader from my
site (Later petSD+ with 16 MHz oscillator) |
New Bootloader for 16Mhz petSD+ |
|
|
Download the
file |
|
e.g.,
new-bootloader-for-16-MHz-petSD-plus.zip |
Unzip the file and extract the required hex file |
the file is
new-bootloader-for-16-MHz-petSD-plus.hex |
|
Program the AVR
flash with the boot-loader downloaded aboveAs described on my
Tools page, the
hardware needed to program the AVR depends on
whether you need to edit and recompile the code, or
just need to download pre-compiled code as a binary
file.
For petSD+, we just need to download the hex
file, so we can use
AVRDUDE.
Install AVRDUDE |
|
|
Download the appropriate
version for your system from : |
http://download.savannah.gnu.org/releases/avrdude/ |
For Windows |
|
Download the latest file with "mingw32"
in its name |
e.g., . . . . .
/avrdude/avrdude-6.1-mingw32.zip |
Unzip the file to where you want to run it from |
|
avrdude.exe and avrdude.conf
will be created |
(The files are also compatible with 64 bit
Windows) |
|
|
For Unix like OSs, use the
appropriate command |
e.g. |
Debian GNU/Linux |
|
FreeBSD |
|
OS X with MacPorts |
|
OS X with homebrew |
|
|
sudo apt-get install avrdude |
sudo pkg install avrdude |
sudo port install avrdude |
brew install avrdude --with-usb |
|
Using AVRDUDE |
|
|
|
The documentation for AVRDUDE (PDF)
is available from : |
http://download.savannah.gnu.org/releases/avrdude/ |
and also
available on-line (HTML) at : |
. . . . . . /avrdude/user-manual/avrdude.html |
|
|
AVRDUDE is a command
line utility and uses a number of
command line switches, with a large number of
options, to control its execution. The number of
options may appear quite daunting, but are
relatively easy to use and well described in the
documentation, the specific requirements for petSD+
are detailed below. However,
should you prefer to use a graphical user
interface GUI), a Java program called
Burn-O-Mat is available for the OSs mentioned
above at :
http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_en.php
Burn-O-Mat has an on-line fuse calculator
available on its webpage, but reading / writing of
the MCU requires that the application is installed
on your computer. Since Burn-O-Mat uses Java, the
Java SE Runtime Environment (JRE), the appropriate
version of JRE for your operating system must be
installed and the configuration file edited to
include the ATMega1284P used in petSD+. |
|
|
JRE can be
downloaded from : |
http://java.sun.com/javase/downloads/index.jsp |
|
|
Command
Line Execution Since the whole point of using
AVRDUDE in this instance is to program a device that
is itself intended for use with a computer without a
GUI, then using a command line tool should not be
too much of a hardship.
Windows users : since working with the command
line is quite unusual these days, a reminder of how
Copy & Paste works in Windows command windows might
be useful -
click to pop up in a new window |
AVRDUDE
Parameters |
|
|
|
The minimum parameters that AVRDUDE
needs are : |
|
|
|
|
("cable", "-c") |
|
|
|
(-P <port>) |
|
|
Examples : |
-c stk200 -P lpt1 |
|
-c avrispmkii |
|
-c usbasp |
|
|
|
(-p partno) |
|
for petSD+, this should be |
|
the type of programmer being
used |
|
which computer port the
device is attached to |
legacy Atmel STK200 parallel
port programmer |
|
|
AVR ISP mkII |
(-P not needed for USB) |
USBASP |
(-P not needed for USB) |
|
the type of controller (MCU)
connected |
-p m1284p
OR -p m1284 |
|
|
|
Testing
communication with the Programmer Before
trying to program the device, it is a good idea to
check that you can successfully communicate with the
programmer on its own by sending it simple commands,
for example, to set the speed of how fast the
programmer will communicate with the MCU, using a
USB connected Atmel AVR ISP mkII for example, you
would enter :
|
avrdude -B 50 -c
avrispmkii -p m1284p |
(-B specifies the bit clock
period in µs) |
This value is very slow, but
should work under all circumstances. If we try
to write to the programmer at too high a rate
(with the -B value too low), the write will
fail.
In the example below under
Windows, with no programmer connected,
avrdude prints out a failure message, in this case, reporting
that it could not find the programmer on the USB
port
|
|
Note : A
similar error will be reported if the USB drivers
for the programmer have not been installed. If you
have not installed the drivers for the USB
programmer, see my
petSD+
Tools page for details of how to do this.
With the
programmer available, but no MCU connected,
avrdude reported the warnings and errors shown below
: |
|
The "target
doesn't answer" error is hardly surprising - as
the MCU was not connected, however, the "cannot
set sck period. please check for usbasp firmware
update" warning is worth mentioning.
If
you "Google" that warning message, you will find
that it is a common problem with the cheap Chinese
USBASP programmers such as mine. It seems that many,
if not all, of those cheap programmers come with an
older version of the firmware which does not support
setting the SCK frequency. For programming petSD+,
the warning is not a barrier to doing the job, it is
just an annoyance. When I programmed the first set
of petSD+ MCUs, I just ignored it, but I quickly got
fed up seeing the warning and upgraded the
programmer's firmware
as described here.
The
screen dumps from this point onwards were taken
after the USBASP firmware has been updated.
With the MCU connected, you should get output such
as :
|
|
The program output shown above, confirms that
AVRDUDE can communicate with the MCU and has read
the device signature and current fuse settings. In
this case, the device signature is correct for an
ATmega1284P (1e9705) and the fuse configuration
corresponds to the default values for the device. If
the MCU has previously been used, the fuse settings
may be different, but there should be no error
messages reported. We can now set the
fuses to the required configuration for petSD+ using :
avrdude -c usbasp -p m1284p -U
lfuse:w:0xF7:m -U hfuse:w:0xd2:m -U efuse:w:0xFC:m |
|
AVRDUDE will generate a lot of output (if you are
interested, click on the image to see the full
listing) as the fuse data is read, written and
verified. You can ignore most of this, but the
output should end with the last two lines shown,
i.e.,
avrdude: safemode: Fuses OK (E:FC, H:D2,
L:F7)
avrdude done. Thank you.
If setting the fuses was successful, we can proceed
to loading the boot-loader program. If there were
any errors reported when setting the fuses, then
these must be fixed first!
Windows users :
please ensure that AVRDUDE is able to find the
boot-loader's hex-file. The easiest way of doing
this is to place the file downloaded
previously, e.g.,
newboot-0.4.1-petSD+-m1284p.hex, into the
same directory as the AVRDUDE executable (.exe)
file.
Once the fuses are set, we're able to
program at full speed with -B 1:
avrdude -c usbasp -B 1 -p m1284p -U
flash:w:newboot-0.4.1-petsd+-m1284p.hex |
|
If no
errors are reported, then the hardest part is done!
All that remains is to copy the application
binary file to the root directory of a FAT formatted
SD card. |
Application Program (NODISKEMU) Installation / Upgrade
Boot-loader operation
Once the petSD+ MCU contains a
compatible copy of the sd2iec boot-loader, loading and
upgrade of the NODISKEMU application firmware does not
require the use of any programming hardware or software.
Each time that petSD+ is powered on, the boot-loader looks
for an updated firmware file on the SD card as described in
the sd2iec boot-loader readme file
:-
"[The] boot loader searches for files
with the correct length in the root directory of the card.
It does not care about file names at all, instead it checks
a tag at the end of the file to determine if it should flash
a file or not.
The boot loader will only flash a
file that is tagged for the correct hardware and that has
either
a) a version number that is
greater than the one currently in memory, or
b) a special version number
that designates the file as a "development version".
In case b) the boot loader will avoid
flashing the same file over and over again, but a
development version file with a different checksum will get
flashed, as well as any non-development version if the
program version currently in the chip. FAT16 and FAT32 are
always supported, FAT12 only if enabled. MMC, SD and SDHC
cards with a supported file system should all work.
The boot loader turns on the red LED
while it is running. If it cannot find a valid application
in the chip, it will flash the red LED for two seconds and
try to find a valid file once more. During card accesses the
green LED is on, during the actual flash operation the green
LED flickers rapidly."
Eventually, the release version of
the petSD+ firmware will be available for download from this
page, however, at this point, Nils is still actively
developing the firmware and a "release" version does not yet
exist.
NODISKEMU's sources are available
from
https://github.com/nils-eilers/NODISKEMU. Once a day,
these sources are compiled for all supported hardware
variants if there are any changes. Those binaries are
available for download from the
nightlies repository on Nils' site.
Install / Upgrade NODISKEMU
Delete any existing firmware
files from the root-directory of your SD-card |
|
Download the required binary
from : |
http://petsd.net/nightlies.php |
Either UnZip the download to
the root directory of your SD card, or |
|
Copy the file from its current locationto root
directory of your SD card |
|
Note : the
archive contains binaries for both petSD and petSD+ |
Use the file named petSD+.bin |
Remove the SD card from your
PC |
|
Windows users : be sure to : |
Safely remove hardware |
Insert the card into your
petSD+ and switch it on |
|
The bootloader will program
the firmware that is suitable for your device |
(Even if both petSD and petSD+ are
present) |
|
|
The binaries can remain onto the
card, as describer above, the boot-loader won't
program a binary over and over again. Since the
files aren't required any longer, they can also be
safely deleted. |
|