Maxduino - User Guide

maxduino post Maxduino - USER'S GUIDE

Maxduino - User guide

Do you know Maxduino? we offer you a complete Maxduino firmware user guide created and shared by desUBIKado... Everything you need to know explained in detail.


This name refers to a series of devices that are used to load computer programs via audio. It is also used to designate the firmwares that these devices carry, which can lead to confusion, since it is possible in a device to TZXDUINO install the TZXduino firmware, but also for example the ToT firmware (Tapuino on Tzxduino), CASduino or the MAXduino.

The files with the data to perform the audio loading are stored on an SD or microSD card, and are of different types depending on the computer to which they are addressed. For example, there are .TZX files that are specific to the Sinclair Spectrum, and others like .CDT that are for Amstrad CPC. There are some extensions, for example .CAS or .TAP, that can be shared by different computers, but their internal coding is different, so you should use only those specific to the computer model for which you want to do the audio upload.

The main difference between firmwares is that each one is only capable of playing certain tape files, so some are specialised, although not restricted, to certain computer models, for example, the TAPuino with Commodore computers (C64, VIC20, etc), the CASduino with MSX computers, the TZXduino with Sinclair computers (Spectrum, ZX80 or ZX81), and the MAXduino, which was born as a unification of the TZXduino and CASduino firmwares, has a more generalist approach, and allows loading on a large number of computers and formats.

The Arduino Nano (Atmega328), Arduino Nano Pro and Arduino Every chips are the chips used so far by the builders of these boards. Recently, the Megaduino project has been born, a board that uses the more powerful Arduino Mega 2560 chip, in which the current maxduino firmware version only occupies 16% of its capacity, compared to the 99% of the other chips, so it is a bet for the future to be able to add new functionalities, among which is the ability to record audio, and not just play it back as the rest of the boards do.

Which systems does the MaxDuino firmware support?

Maxduino in its latest version supports the following retro systems and file formats:

  • Spectrum: TAP and TZX
  • Amstrad CPC: CDT
  • MSX: CAS and TSX
  • ZX80: O
  • ZX81: P
  • Acorn Atom and Electron: UEF (uncompressed) and TSX
  • Dragon 32/64 / Tandy CoCo: CAS and TSX
  • SVI Spectravideo: TSX
  • Oric 1 and Oric Atmos: Oric TAPs are not supported, but TAPs converted to TSX are supported.

As you can see this firmware does not allow the loading of TAP tape files for Commodore VIC20, C64 or C16 / C116 or Plus/4. However, if you have a TZXDuino board, you can install the ToT (Tapuino on Tzxduino) firmware which does, but then you will lose the ability to upload to other systems.

On the other hand, it is possible to incorporate in the TSX files the data, not only from the MSX, but from any computer that will use the Kansas City Standard encoding. Thus in the github of NataliaPC we found utilities to convert different types of tape files to TSX:

  • uef2tsx.php: For the .UEF of the Atom, Electron and BBC Micro computers from the Acorn company.
  • oric2tsx.php: For Oric .TAPs
  • drg2tsx: For Dragon and Tandy CoCo .CAS files
  • svi2tsx: For .CAS from SVI Spectravideo
  • cas2tsx: For MSX .CAS

Why use a MAXduino and not a mobile application?

There are mainly 3 advantages:

  • These devices directly read the data to be converted into audio without the need for prior conversion to .wav format, which takes some time, while playback from ?duinos? is immediate, and also consumes storage space. Mobile applications generally do not delete these .wav files automatically once they have been used, and they take up a lot of space if you load a lot of games, so you end up having to delete them manually, which is a nuisance.
  • On the other hand, some of these devices (not all) have a REM (remote) connector that allows the computer to control the load, which is very useful in multi-load games for those computers that had the option to control the datasettes. However, although there are models that do not have a remote connector, this is not a serious problem because it is implemented so that when playback is paused, it is very easy to go back or forward between blocks simply by using the up or down buttons on these devices.
  • Some of the duinos have amplification, which is very useful on certain computer models that suffer from some deafness, and need a fairly high volume for audio uploading to be successful. This is sometimes difficult to achieve on a mobile phone because of the volume restrictions on most phones.
  • And the drawback, obviously, is the price, since mobile applications specialised in playing these tape files are generally free, and we all have a mobile phone nowadays. However, duinos are not particularly expensive, varying in price from 15 to 40 euros depending on their features, whether they have a case or not, etc.

What is MaxDuino?

To make a little history, it all started with Sweetlilme and its project TAPuinofocused on loading .TAP audio files for Commodore machines (PET, VIC20, C64 and C128).

Later, and based on it, Duncan Edwards and Andrew Beer created the CASduino project to play .CAS files for MSX. Then TZXduino was born, created by the same authors, to play .TAP and .TZX files from Sinclair ZX Spectrum, to which they quickly added the .CDT files from Amstrad CPC as they are basically .TZX with a different extension. They continued to improve it and added the ability to play .CAS files from the Dragon data and Tandy Color Computer.

Other improvements were also coming to the TZXduino like the support for .AY files (tunes that can be played on the AY-3-8912 sound chips in Spectrum 128, Amstrad CPC or MSX computers), or the support to load .P and .O files for the Sinclair ZX80 and ZX81. Even improvements came from other programmers, such as the support for .TSX files for MSX computers, contributed by NataliaPC (Natalia Pujol), or the correction of a bug in the LCD printing routine, by Rafael Molina (rcmolina).

It was Rafael Molina, who found TZXDuino's directory rewinding to be a horrible way to navigate, and whose ideas for improvement did not convince Duncan Edwards, who considered that it wastes too much memory, who started to optimise the TZXDuino code. He already had an idea in his head, which he finally made public on 20 August 2017 in this entry being the kick-off of his open source project MaxDuino, in which the TZXduino and CASduino firmwares were unified.

You have to think that before, if you only had a duino, you had to install the TZXduino firmware if you wanted to make loads on a Spectrum, and if you wanted to make loads on an MSX you had to install the CASduino firmware. When the firmwares were unified this was no longer necessary, which was a great advantage.

Since then, Rafael has continued to optimise and add more features to the Maxduino firmware. Furthermore, all the OLED display development, bug fixes, time and step counters, menu navigation, polarity inversion, block rewind, logarithmic search, BBC Micro developments, Dragon and Tandy CoCo improvements, id15 block support, Arduino Nano Every support, and Tapuino support on TZXDuino for Commodore 64, are many of the features that have been incorporated into the original TZXDuino project.

Thanks to the fact that the MaxDuino project is open and participatory, Rafael Molina has received code contributions from many people, which have served to improve it. He has had help from other programmers, such as Natalia Pujol (NataliaPC), Alfredo ?Retrocant? (@acf76es), Spirax, Ramón Martínez Palomares (ramp), without forgetting the original projects of Sweetlilme -Tapuino- , and those of Duncan Edwards and Andrew Beer -CASduino and TZXduino-.

To follow the evolution of this project you can read the Official Maxduino thread on and the fonts are available at your github.

What does a MaxDuino device look like?

I have already mentioned before that the firmware is called MaxDuinobut the devices may be called by a variety of names such as Tzxduino, Maxduino, Miniduino o Megaduino. These devices are of "home-made" construction, and those who build them generally make limited runs, and once they are finished, they are not produced any more. Normally in these cases the information is made available to everyone so that everyone can build their own, basically the designs of the boards and the list of components. However, there are other manufacturers that have their own online shopsand sell their own models under their own name, indicating that they are compatible with Rafael Molina's MaxDuino firmware.

Examples of different MAXduino models:

A Maxduino device consists of:

  • A connector to provide the 5v power supply needed by the device. Generally a MicroUSB port is used.
    A bay for inserting an SD or microSD card, depending on the model. The card must be formatted in FAT32 or FAT16, with models up to 8GB capacity working without problems.
    A 3.5mm stereo jack for audio output. Only the left channel is used, so stereo-to-stereo or mono-to-mono cables are suitable.
  • A 2.5 mm jack plug for the remote function (control of the cassette engine by the computer, e.g. on Amstrad CPC, MSX, Acorn Electron or BBC Micro). Not all MaxDuinos have this.
    An LED or OLED screen to display menus and file names. The 4 types of screens supported are:
  • 16×2 LCD display (2 lines of 16 characters each)
  • 20×4 LCD display (4 lines of 20 characters each)
  • 128×32 pixels OLED display (4 lines of 16 characters)
  • 128×64 pixel OLED display (8 lines of 16 characters)

The characters on LCD screens are usually larger than those on OLED screens, so it is better for those whose eyesight is not as good as it used to be. Both types of screens, LED and OLED, offer the same information, except that OLED and 20×4 LCD, by having more lines, can distribute the texts better and make everything more eye-catching.

Five buttons or push buttons:

  • Play / Pause
  • Stop
  • Up
  • Down
  • Root or menu or pivot

This button is called in these 3 ways because it has had different functions as the firmware has evolved. The root use is no longer used, and refers to when in older versions of the TZXDuino firmware (version 1.11 or earlier), it was the only way to go back in the directory tree, and what it did was to take you to the root directory of the SD. In modern versions of MaxDuino it can work as a Menu, and pressing it will present the configuration menu, or as a pivot, which allows, by pressing it together with another button, to access more functions.

On the other hand, on the MegaDuino boards they have added a 6th button to be used for future improvements such as, for example, the possibility of audio recording.

An amplifier (e.g. LM386 single channel) to give more power to the sound, useful for those systems that are a bit more muffled. It can be activated/deactivated via jumpers on the board. Not all models have an amplifier.

How to operate the MaxDuino?

The first thing to do is to insert an SD or microSD card formatted in FAT32 or FAT16 that contains the images of the tape files. If you have several physical machines or some FPGA, a practical way is to organise the information in folders by system, then by file type (.CAS, .TSX, etc), and finally separated alphabetically. Having everything in order makes it easier to search, but also to add new files later. To explain how it works I will use my Miniduino, created by Antonio Villena with Mejias3D housing.

The arrangement of the 5 buttons on the Miniduino is as follows:

image 2 Maxduino - User Guide

This model has a 1.3-inch OLED display with 128×64 pixels (16 characters on 8 lines).

It is possible that when customising the firmware it is told to use all 8 lines, but in that case it only uses the top 3 and bottom 3 lines, leaving 4 black lines in the middle. It is best to customise it when compiling the firmware to be used as a 128×32 display (16 characters on 4 lines).

In that case only the even lines are used and the odd lines are turned off, so that the characters have a height of 16 pixels and a width of 8, increasing their legibility.

As can be seen in the picture, this model does not have the 2.5mm remote connector, only the 3.5mm audio output jack. This is not a big deal, as there are tape file formats that have block IDs that indicate that a stop should be made before continuing with the audio playback.

The operation explained below is with firmware version 1.54.

image 1 Maxduino - User Guide
Maxduino - User Guide 37
image Maxduino - User Guide
Maxduino - User Guide 38

Maxduino home screen

The first file or directory of the root folder that was saved in it will be displayed. The files or folders are not sorted alphabetically, but appear in the chronological order in which they were recorded.

At start-up, a logo can be seen for one and a half seconds. When compiling the firmware, you can choose from a number of logos which one you want to be displayed.

  • In the first row you can see the firmware version, in this case it is 1.54.
  • The second row shows the folder where we are positioned.
  • In the third row you can see the ID and BLK fields without informing. These fields will be reported when we are positioned in a tape file, and are used to indicate which block we are in (BLK) and the identification number of the type of block (ID). Not all block types are printed on the screen so as not to slow down loading, only the types with ID 10, 11, 4B and TAP.
  • In the fourth row you can see the current baud rate for turbo loading of .CAS and .TSX files on the MSX platform, whether or not the engine control (remote) is enabled (on/off) ? useful on platforms that supported remote such as Amstrad CPC, MSX and BBC Micro, and whether or not the TSXCzxpUEFSW option is enabled to enable turbo loading (blocks 4B) of the MSX .CAS and .TSX files, the change of the audio signal polarity in the Spectrum and Amstrad CPC files, and the parity control in the Acorn Electron and BBC Micro .UEF files.
image 3 Maxduino - User Guide
Maxduino - User Guide 39

Changing the current position in Maxduino

The current position can be changed by pressing the following buttons:

  • PIVOTIn the top line, the firmware version disappears and the directory or file in which you are located appears.

Of the three values in the top line, the central one is the position occupied by the file or directory in which we are positioned within the current folder, and the other two, the initial and final values of the current interval. When we enter a folder, the first value is always the first file or directory, and the third the last file or directory in that folder. With 1 < 1 < 17 when entering a directory it is telling us that there are 17 directories or files (3rd value), and that we are positioned in the first one (2nd value).

  • DOWN: To scroll down the list of files and directories within a folder. We can press and hold it and it will scroll automatically (autoscrolling).
    UP: To scroll up within the list of files and directories within a folder, you can hold it down and it will automatically scroll (autoscroll).
  • PLAY / PAUSE: If we are positioned above a directory, we enter it. If we were positioned above the Amstrad CPC directory, and we have pressed PLAY / PAUSE, we enter it. In this case we are now positioned in the CDT directory and in the upper line you can see the upper directory from where we have come from. Here we could enter inside the CDT folder by pressing PLAY / PAUSE, and then press DOWN until we are positioned in the folder J. If being on top of it we press PIVOT we will see its position.
    (the 11th of 27) inside the CDT folder
  • STOP / BACK: You go back to the next higher directory.
image 4 Maxduino - User Guide
Maxduino - User Guide 40
image 5 Maxduino - User Guide
Maxduino - User Guide 41
image 6 Maxduino - User Guide
Maxduino - User Guide 42
image 7 Maxduino - User Guide
Maxduino - User Guide 43

Rapid movement through semi-intervals

This is useful when we want to scroll through a folder with a lot of files, and using the DOWN button to get to a certain file that is quite far down the list would take us a lot of clicks or time. The search by half-intervals consists of narrowing down by halves and always keeping the midpoint of the upper or lower half.

When I go into the folder ?/Amstrad CPC / CDT / a? on my SD card and press and hold the PIVOT button I see the following information
1 < 1 < 1077
That is, I am positioned in the 1st file (second value) of a folder that has 1077 files.

I can now use the DOWN and UP buttons to scroll through the list of programmes starting with "A". It is possible to hold down the DOWN or UP buttons and we will scroll without the need to make multiple presses to move forward or backward. If after scrolling I press and hold the PIVOT button and I see something like
1 < 47 < 1077

is that I am now positioned in the 47th file or directory within that folder. If I know that the game I want to play is in position 734, I have the option of holding down the DOWN button until I reach it, or using the semi-interval scrolling to get closer. If I press PIVOT + DOWN at the same time, the interval becomes [47, 1077] and the current position will be more or less in the middle of that interval. Once this is done, if I hold down the PIVOT button now I see
47 < 578 < 1107
I just advanced more than 500 positions with a single keystroke!
Following the same system, I advance by semi-intervals, getting closer to the game I am looking for.
578 < 843 < 1177
Wow, I've gone too far!
Now I can also go backwards by half-steps by pressing PIVOT + UP at the same time, the new interval being [578, 843].
578 < 710 < 843
I am already in position 710, I can now move on to the next half-interval with PIVOT + DOWN.
710 < 777 < 843
Now back to previous half-interval with PIVOT + UP
710 < 743 < 777
When we are close, we have to decide whether we want to continue advancing by half-steps or use the UP and DOWN buttons to position ourselves in the file or directory we are looking for.

Playing a tape file on maxduino

If we are on top of a tape file we will see the following information in the first row the size in bytes of the file, and in the second row the name of the file, which in case of not entering the characters of a row, will scroll to see the whole name. We can perform the following actions by pressing the buttons:

PLAY / PAUSE: The first time we press it, it will start playing the tape file. In the 1st line we will see ?Playing?, the % of the load we are carrying and the number of seconds that have elapsed. If we press it again, it will pause and in the 1st line we will see ?Paused?, so that if we press it a third time, the playback will resume from where we were stopped.

While the file is being played, we can see on the third line how the block number (BLK) and the type of block that is being played at that moment (ID) are advancing.

If the turbo mode ( %^ON) is enabled, then the turbo block loads in the MSX .CAS and .TSX files will be played at the speed that is currently set for the turbo blocks (on the screen you can see that it is currently 3,850 baud).

Maxduino - User Guide 44

If we have the ?remote? cable connected to the 2.5mm jack, and the motor control option activated (on), the computer will have the control to pause the file playback when desired, as well as to resume it, i.e. it has the control of the PLAY / PAUSE button.

When paused, we enter block mode, and we can use these combinations:
UP and DOWN: Scroll through the blocks of the file. This mode is basically used for multi-load games that forced, in case of failure, to repeat a previous stage that had to be reloaded by rewinding the cassette. To do this, once a stage of a game has been loaded, which is generally a certain block, if we have to reload it, in block mode we go backwards by pressing the UP button to the block number we want to position ourselves in, and then press PLAY to load it. The block number in which we are positioned, as well as its type, appear on the top row.

  • PIVOT + DOWN and PIVOT + UP: Scroll through half-intervals, as explained in section 6.4, but through the blocks.
  • PIVOT + STOP / BACK: Activate or deactivate the option at that time.
  • TSXCzxpUEFSW without the need to access the configuration menu.
  • STOP / BACK: Audio playback stops and returns to the beginning of the file.

Configuration menu

If we are not playing a file, we can access the configuration menu by pressing the combination PIVOT + STOP / BACK. Once inside we can scroll through the different options with the UP and DOWN buttons.

image 9 Maxduino - User Guide
Maxduino - User Guide 45

Baud Rate Option

The first option we can configure is the baud rate. This is the loading speed for the turbo blocks of the MSX .CAS and .TSX files.

The speeds we can select are: 1,200, 2,400, 3,600 and 3,850 baud. To enter this option, press PLAY. You will see 1.200 on the second line and, as there is no asterisk next to it, it indicates that this is not the current default option. Press DOWN and UP to move between the different speeds.

Note that the speed 3.850 is marked with an asterisk because it is the current speed for the turbo blocks of the MSX .CAS and .TSX files. To change to another one, we position ourselves on it and press PLAY / PAUSE.

The selection of baud rates 1200, 2400, 2700 and 3600 is only exclusive for block 4B in the MSX .TSX and .CAS formats, and has no influence at all on the baud rates of other block types and file types from other platforms. To exit this option, press STOP / BACK.

image 10 Maxduino - User Guide
Maxduino - User Guide 46
image 11 Maxduino - User Guide
Maxduino - User Guide 47
image 12 Maxduino - User Guide
Maxduino - User Guide 48
Maxduino - User Guide 49

Option Motor Ctrl

The second option that can be configured is the motor control of the cassette. If we have the ?remote? cable connected to the 2.5mm jack, and the motor control option activated (on), the computer will have the control to pause the playback of the file whenever it wants, as well as to resume it, that is to say, it has the control of the PLAY / PAUSE button.

Press the PLAY / PAUSE button to enter this option and you will see the current value, ON* if it is activated and off * if it is deactivated. Press PLAY / PAUSE again to activate or deactivate the option. To exit this option press STOP / BACK.

image 14 Maxduino - User Guide
Maxduino - User Guide 50
image 15 Maxduino - User Guide
Maxduino - User Guide 51


With this third option we can enable 3 different functionalities, being actually the long name of the option TSXCONTROLzxpolarityUEFSWITCHPARITY
The functionalities are:

  • Enables turbo-charging for MSX .CAS and .TSX files.
  • Changes the polarity of the audio signal of Spectrum and Amstrad CPC files, necessary for loading certain Amstrad CPC games in CDT format, for example:
    (i) No polarity change: (off) : Tai-Pan, Forbidden Planet, Starbike
    (ii) With reversed polarity (on): Basil The Great Mouse Detective, Mask
  • Change the parity in Acorn Electron and BBC Micro .UEF files. Necessary for loading games like Starquake or The Sentinel. A list of protected tapes on which parity needs to be enabled can be found at this link:
image 16 Maxduino - User Guide
Maxduino - User Guide 52
image 17 Maxduino - USER'S GUIDE
Maxduino - User Guide 53

Press the PLAY / PAUSE button to enter this option and you will see the current value, ON* if it is activated and off * if it is deactivated. Press PLAY / PAUSE again to activate or deactivate the option. To exit this option press STOP / BACK.

How to update the MaxDuino firmware?

From time to time Rafael Molina publishes in his github new versions of the firmware to fix bugs and/or add some new functionality. Each time a new version is published, the new changes are indicated, so it is up to us to decide whether it is worth updating our board or not.

I'm going to explain how I do it with my Miniduino, but I suppose that for the rest of the boards it will be quite similar.

In the case of the Miniduino, the firmware update of the Arduino Nano Pro chip is done through a series of pins on the board.

In order to connect them to the computer I need a USB to serial converter, specifically the one I use in the following:

And the connection between this USB to RS232 converter and the Miniduino board is as follows:


In case we did not have installed the Arduino IDE we can download the appropriate version for your operating system (Windows, Linux or Mac) and install it. The version I have now installed is 1.8.10 for linux. The version recommended by Rafaél Molina is 1.8.4, but I have not had any problems with the one I have used.

Once installed, access Rafaél Molina's github ( and download the MaxDuino firmware sources to the computer Open the Arduino IDE, go to the folder where the sources are and load the MaxDuino_v1.xx.ino file (where 1.xx is the version). We will see that the project code is distributed in a series of tabs:

The next step is to select through the Tools menu the board, the type of arduino and the port used to communicate with the USB to RS232 converter. In my case the options I have to select are:

  • Plate: Arduino Pro or Pro mini
  • Processor: ATmega328P (5v, 16Mhz)
  • Port: /dev/ttyUSB0 (on Windows it is more common to select something like COM4)

There are 3 user configuration files in the firmware, and the appropriate one must be used depending on the processor selected in the IDE:

  • userconfig.h ? For Arduino Nano (ATmega328) and Arduino Pro Mini
  • userEVERYconfig.h ? For the Arduino Nano Every
  • userMAXconfig.h ? For the Arduino Mega 2560

As my Minduino has an Arduino Pro Mini, the file I have to modify is the userconfig.h .

Definitions are either uncommented (remove the double slash //) to take effect or commented out (set the double slash //) to make them ineffective.

Depending on the functionalities that we leave active, the firmware will be able to grow in size, so if it does not fit in the memory of the arduino chip on our board, we should have to comment some to do without it, and compile again.

In my case I have left all the functionalities that are already active by default, and I have only had to customise three things to leave it to my liking:

  • The type of display used by the Miniduino board
  • PIVOT functionality in the ROOT button
  • The LOGO I want to appear on start-up
image 21 Maxduino - User Guide
Maxduino - User Guide 54
Maxduino - User Guide 55
Maxduino - User Guide 56

So the changes I have made are:

define OLED1306 // Set if you are using OLED 1306 display
// #define OLED1306_128_64
// 128x64 resolution with 8 rowsdefine OLED1106_1_3
// Use this line as well if you have a 1.3" OLED screen

The 2nd line is annotated so that the OLED1306_128_64 definition has no effect. The OLED display of the Miniduino allows the 8 lines, but then the characters look very small (size 8×8) and also only 4 of the 8 rows are used, so it is better to leave it commented, so the information is presented in 4 rows, and the characters are 8×16 more readable.

He also left the following definition for the ROOT button to function as PIVOT undefined

define btnRoot_AS_PIVOT

How to load the MAXduino LOGO in the eeprom

In the end for the LOGO I didn't make any changes, and with the following definitions I get the MINI logo that Rafael created for the Miniduino, but I could have commented the last definition and selected another logo.

ifdef OLED1306_128_64

//#define Maxduino2Alf // new Maxduino2 logo 128x64 by Alfredo Retrocant
define CosmicCruiser // Dragon32 CosmicCruiser by rcmolina


//#define LOGOARDUITAPE // original arduitape logo
//#define LOGOMAXDUINO // new logo created by Spirax
//#define LOGOMAXDUINO2 // new logo2 created by rcmolina
//#define LOGOMAXDUINO3 // new logo3 created by rcmolina
//#define LOGOMAXDUINO4 // new logo4 created by rcmolina
//#define SUGARLESS_1 // new logo cretaed bt YoxxxoY
//#define SUGARLESS_2 // new logo created by YoxxxoY
define LOGOMINIDUINO // new logo for A.Villena's Miniduino by rcmolina

Once the changes have been made, we are ready to compile the firmware to our liking and send it to the Arduino's memory. However, in this same file they indicate a way to save memory by introducing the logo in the EEPROM.

// EEPROM LOGO. How to move to EEPROM, saving memory:
// Phase 1: Uncomment RECORD_EEPROM_LOGO define , this copies logo from memory to EEPROM.
Compile the sketch.
// Phase 2: Comment RECORD_EEPROM define, uncomment LOAD_EEPROM define. Compile the
sketch again
// Also it's possible to select record and load both for better testing new logo
activation, pressing MENU simulates a reset.
// And both can be deactivated also showing a black screen.

What we have to do is to compile and send the firmware to the board 2 times. The first time we leave these two lines like this

define RECORD_EEPROM_LOGO // Uncommenting RECORD_EEPROM deactivates #define Use_MENU

And click on the "Upload" button or CTRL+U, and if everything is OK, it will compile the firmware and upload it to the board. If there is any error, it will appear in the lower window of the IDE, and we will have to fix it. The second time we change those two lines to:

// #define RECORD_EEPROM_LOGO // Uncommenting RECORD_EEPROM deactivates
#define Use_MENU define LOAD_EEPROM_LOGO

And click on the upload button again, so we will have finished updating the firmware. This action of compiling 2 times only has to be done the first time, or if we are going to change the LOGO, for the rest we can leave the definitions as the second time.

Where can I buy a MaxDuino?

Do you want to know more?

The content of this handbook is basically a tidying up of the scattered information found in these threads.


Format: TZX

ID Value Description

ID10 0x10 Standard speed data block ID11 0x11 Turbo speed data block ID12 0x12 Pure tone ID13 0x13 Sequence of pulses of various lengths ID14 0x14 Pure data block ID15 0x15 Direct recording block -- TBD - curious to load OTLA files using direct recording (22KHz) ID18 0x18 CSW recording block (Not supported) ID19 0x19 Generalized data block (Not supported) ID20 0x20 Pause (silence) or 'Stop the tape' command ID21 0x21 Group start ID22 0x22 Group end ID23 0x23 Jump to block ID24 0x24 Loop start ID25 0x25 Loop end ID26 0x26 Call sequence ID27 0x27 Return from sequence ID28 0x28 Select block ID2A 0x2A Stop the tape if in 48K mode ID2A 0x2B Set signal level ID30 0x30 Text description ID31 0x31 Message block ID32 0x32 Archive info ID33 0x33 Hardware type ID35 0x35 Custom info block ID4B 0x4B Kansas City block (MSX/BBC/Acorn/?) IDPAUSE 0x59 Custom Pause processing ID5A 0x5A Glue block (90 dec, ASCII Letter 'Z') AYO 0xFB AY file ZXO 0xFC ZX80 O file ZXP 0xFD ZX81 P File TAP 0xFE Tap File Mode IDEOF 0xFF End of file

Format: UEF

Chunks Value Description

ID0000 0x0000 origin information chunk ID0100 0x0100 implicit start/stop bit tape data block ID0104 0x0104 defined tape format data block: data bits per packet/parity/stop bits ID0110 0x0110 carrier tone (previously high tone) ID0111 0x0111 0x0111 carrier tone (previously high tone) with dummy byte at byte ID0112 0x0112 Integer gap: cycles = (this.baud/1000)2n ID0114 0x0114 Security Cycles replaced with carrier tone ID0116 0x0116 floating point gap: cycles = floatGap * this.baud IDCHUNKEOF 0xffff


We would like to thank Rafael Molina for his great work with the MaxDuino project, as well as his contributions to improve this document.


Initial version by desUBIKado under license Creative Commons Zero

Download the same guide in ODT and PDF format.

How useful did you find this content?

Click on a star to rate!

Average score 4.8 / Counting of votes: 10

So far, no votes. Be the first to rate this content.

Since you have found this content useful...

Follow me on social media!


How useful did you find this content?

Click on a star to rate!

Average score 4.8 / Counting of votes: 10

So far, no votes. Be the first to rate this content.

Since you have found this content useful...

Follow me on social media!

Leave a Reply