Tapuino / Tape Emulation Mods
The Tapuino is an open-source tape emulator for Commodore computers. It plays .TAP images from a micro-SD card into the cassette port in place of a 1530 Datasette, and can record to the card. Its author, Peter Edwards ("sweetlilmre"), published it as "the $20 C64 tape emulator". The firmware runs on an ATmega microcontroller (the project's FAQ refers to an Arduino Nano) and is released under the MIT licence.[1][2]
Status
[edit | edit source]The original Tapuino is in maintenance mode, superseded by its author's TapuinoNext. The last tagged firmware is v2.10.0, on a commit dated 10 February 2022.[1]
The cassette port
[edit | edit source]| Pin | Signal | Inside the C64 |
|---|---|---|
| A / 1 | Ground | |
| B / 2 | +5 V | |
| C / 3 | Cassette motor | 6510 port line P5, through Q1, Q2 and Q3 |
| D / 4 | Cassette read | FLAG input of CIA U1, pin 24 |
| E / 5 | Cassette write | 6510 port line P3, U7 pin 26 |
| F / 6 | Cassette sense | 6510 port line P4, senses the play key |
Pin names are from Commodore's Programmer's Reference Guide;[3] the circuit connections are from the C64 service manual, which also says the motor drive turns on when P5 goes low, with zener CR2 holding the base of Q1 at 7.5 V.[4]
Safety notes from the project
[edit | edit source]Do not power it from USB and the computer at once
[edit | edit source]The project's FAQ asks whether the Tapuino can be connected to the C64 and to USB at the same time, and answers: "Don't do this, ever."[2]
Open-collector SENSE line
[edit | edit source]On a real Datasette, SENSE is a switch that grounds the line when a key is pressed and leaves it floating otherwise. The Tapuino copies this by switching its pin between output-low and high-impedance input. The source comments explain why: on the plus/4 the SENSE line is shared with data pin 2 of the user port, and driving it can cause problems there.[1]
Motor sense
[edit | edit source]The Tapuino reads the MOTOR line to decide whether to play or pause the TAP data, which is what makes multi-load games work and pauses playback while the filename is displayed. If the display sticks at 0 per cent with a small "m" showing, motor sense is not working. Check that:[2]
- the MOTOR line is high from the C64 to the opto-coupler and low from the opto-coupler to the Nano;
- the Datasette edge connector is pushed fully onto the C64.
Recording
[edit | edit source]Use as fast an SD card as possible; the FAQ calls this essential. The three cases need different settings:[2]
| Direction | Invert option | Procedure |
|---|---|---|
| Datasette to Tapuino (archiving a tape) | 1 | Start the Tapuino recording (auto or manual), then press play on the Datasette. Stop the Tapuino by hand at the end. |
| Tapuino to Datasette | 1 | Press record on the Datasette, then play on the Tapuino. Stop the Datasette by hand at the end. The computer is only switched on. |
| Computer SAVE to Tapuino | 0 | Start the SAVE, then record on the Tapuino. Recording stops by itself at the end. |
Displays and build options
[edit | edit source]Three I²C displays are supported: 1602 character LCDs with the Hitachi HD44780 controller, and OLEDs with SSD1306 or SSD131X controllers. The display and the menu language are chosen in config-user.h, made by copying config-user.h.example, and the display's I²C address is set with LCD_I2C_ADDR (0x27 for the LCD and 0x3C for the OLEDs in the example). The build stops with an error unless exactly one display type and exactly one language are defined.[1][2]
The README links one third-party board design, arananet's TapuinoMini 1.03, whose layouts are copied into the repository's layout folder, and a 3D-printable enclosure by fabriziofiorucci in the CAD folder.[1]
Troubleshooting the cassette port
[edit | edit source]If a Tapuino will not load on a C64 that has not been tested with a real Datasette, the fault may be in the computer. Commodore's troubleshooting guide lists these cassette symptoms:[4]
| Symptom | Check |
|---|---|
| Cassette motor keeps running | U7 (6510) |
| Motor keeps running after loading; the TIP29 gets very hot and the fuse may blow | Cassette port for shorts; R4 (possibly open) |
| Cursor disappears when the cassette is plugged in | U7 (6510) |
| Cassette runs very slowly; the program loads but will not run | U7 (6510) |
Related pages
[edit | edit source]References
[edit | edit source]- ↑ 1.0 1.1 1.2 1.3 1.4 Peter Edwards ("sweetlilmre"), Tapuino, GitHub repository: README,
config.h,config-user.h.exampleandversion.h(retrieved 2026-10-01). Repository created June 2014; MIT licence; tag v2.10.0 on a commit of 10 February 2022; README states the project is in maintenance mode and superseded by TapuinoNext. - ↑ 2.0 2.1 2.2 2.3 2.4 Tapuino FAQ, project wiki (retrieved 2026-10-01).
- ↑ Commodore Business Machines, Commodore 64 Programmer's Reference Guide, 1982, ISBN 0-672-22056-3, Appendix I, "Pinouts for Input/Output Devices", pp. 395-397. archive.org scan.
- ↑ 4.0 4.1 Commodore Business Machines, Commodore 64 / 64C Service Manual, "The Cassette Interface Circuits", p. 11, and the 64 troubleshooting guide, p. 15, hosted at Commodore 64 / 64C Service Manual.