GithubHelp home page GithubHelp logo

sweetlilmre / tapuino Goto Github PK

View Code? Open in Web Editor NEW
131.0 23.0 48.0 6 MB

tapuino

Home Page: http://www.sweetlilmre.com

License: MIT License

C++ 0.01% C 44.63% Makefile 0.13% Stata 55.23%
c64 datasette retro commodore-64 commodore sd-card tapuino

tapuino's Introduction

Tapuino

This project is now in maintanence mode and has been superseeded by the Tapuino Next

However amazing people keep building this version and adding value (see the 3D printable enclosure below)

Limited support can be found in the following Amibay forum Amibay

The $20 C64 Tape Emulator

Details can be found on my blog: http://www.sweetlilmre.com

The FAQ and other docs can be found on the wiki: https://github.com/sweetlilmre/tapuino/wiki

A really nice board design can be found here: https://github.com/arananet/tapuinomini1.03

And a write up here: http://arananet-net.kinja.com/tapuino-1-03-mejorando-el-tapuino-mini-1788202676

These schematics are also provided in the "layout" folder as a convenience.

Portions of this code are copyright by their respective owners:

3D printable enclosure

by @fabriziofiorucci

A 3D printable enclosure designed with Fusion 360 is available for download as .stl files

tapuino's People

Contributors

arananet avatar barbeque avatar fabriziofiorucci avatar juri74 avatar meonwax avatar mkubi avatar ozayturay avatar squirrel61 avatar sweetlilmre avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tapuino's Issues

Feature request: Read .idx files

Sometimes in a .tap preserved file (magazine, multi-games or Turbo Load tapes), you have all programs/games saved one per one (because all of them are recorded after each other in one preserved file).

Then, I would like to put the virtual position of each program (as the datassette counter) to run Turbo Load program at the beginning and jump to the correct position to load the program or game.

Another example, 007 A View To a Kill preserved tap game (it's only one file too). It has different missions and you need to reset your c64 after finish each one to load the following (because at the end there are completely independent programs) and when you are using a real datassette, you need to move to the correct counter position.

There is a tool named TAP Manager (v.1.6.0 or later), that you can download from http://www.manosoft.it/ that generates an index file (.idx). You can choose between to type of index files (Princess or Ultimate 64):

image

Examples of taps files with .idx files (index) are at archive.org (from The Ultimate Tape Archive collection):

https://archive.org/download/uta_10_Computer_Hits_2_1986_Beau_Jolly_8370

My request, add the feature of read .idx file (as an index) to move between tape positions.

Thanks and best regards,
Shark

Rotary Encoder

I would prefer a rotary encoder support instead of 4 buttons.
It would be easier to create a smaller case or to build it into the c64 case himself.

Compiler warnings and NL language

Recently, I brought new life into an old love and acquired a used C64. Of course, I wanted to know what could be done with such an old system using new technology and discovered your Tapuino project.

Currently I'm still waiting for some of the parts needed, but I already had an Arduino Nano V3 which I programmed with the Tapuino firmware.

When compiling with the current Arduino IDE 1.6.12, 4 warnings where issued. I don't know if this is a result of compiler changes in the recent IDE or if they already where present when you created the project. I also don't know, when the warnings already where present when you created the project, if they where left there on purpose. However, they're easy to clear.

This is the list of warnings:

sketch\tapuino.h:16:25: warning: type of 'g_rec_finalize_time' does not match original declaration
extern volatile uint8_t g_rec_finalize_time;
sketch\tapuino.c:99:19: note: previously declared here
volatile uint16_t g_rec_finalize_time = REC_FINALIZE_TIME / 10;

sketch\tapuino.h:14:25: warning: type of 'g_ticker_hold_rate' does not match original declaration
extern volatile uint8_t g_ticker_hold_rate;
sketch\tapuino.c:96:19: note: previously declared here
volatile uint16_t g_ticker_hold_rate = TICKER_HOLD / 10;

sketch\tapuino.h:13:25: warning: type of 'g_ticker_rate' does not match original declaration
extern volatile uint8_t g_ticker_rate;
sketch\tapuino.c:95:19: note: previously declared here
volatile uint16_t g_ticker_rate = TICKER_RATE / 10;

sketch\tapuino.h:15:25: warning: type of 'g_key_repeat_next' does not match original declaration
extern volatile uint8_t g_key_repeat_next;
sketch\tapuino.c:98:19: note: previously declared here
volatile uint16_t g_key_repeat_next = KEY_REPEAT_NEXT / 10;

To correct, I changed tapuino.h as follows:
`#ifndef TAPUINO_H

define TAPUINO_H

include "ff.h"

void tapuino_run();
void record_file(char* pfile_name);
int play_file(FILINFO* pfile_info);
uint32_t get_timer_tick();
void save_eeprom_data();

extern volatile uint8_t g_invert_signal;
extern volatile uint16_t g_ticker_rate;
extern volatile uint16_t g_ticker_hold_rate;
extern volatile uint16_t g_key_repeat_next;
extern volatile uint16_t g_rec_finalize_time;
extern volatile uint8_t g_rec_auto_finalize;
extern uint8_t g_machine_type;
extern uint8_t g_video_mode;
extern volatile uint8_t g_is_paused;

endif`

This makes the project compile without warnings. However, since I've not been able to test it (still waiting for some parts), I don't know if I possibly broke something.

Furthermore, I've also created a Dutch menu language file. But have to check on the working hardware if all messages are meaningful before I'll share them.

Low memory warnings

Is this normal? First time working with the code part of tapunio and a bit rusty with the Arduino but seems to be a big possible issue should you have more the a few tape files to track.

image

Trying to reimage my mini as it jsut stopped working and trying to resurrect it as it looks like the nano may be still working but lost the software.

Pause function

Could be possible to implement a pause button? example: using the "select" button during tape play, pressing it will pause tape and pressing it again will unpause tape.
this would be useful with tapes that have more programs/games in it

utf-8 chars

Hi!
is it possible to add accented or special latin chars?

i want to translate into portuguese or french, but special latin chars are not allowed.

Thank you.

Recordings are finalized when motor stops

Hello, I have a proposal. Tapuino shouldn't finalize a recording when the motor is turned off. It should just wait for either the motor to be started again or the user to press "stop". I'm playing with the Freeload mastering tool. It loads each file from disk and then stores it on tape. But it doesn't work with Tapuino, because when the program stops the motor and reads from disk, the recording is finalized.

Error in header of saved c16 .tap files

When saving from C16 (and presumibly Plus4) is generated a C64 tap header, this preventing loading the tap files into winvice emulator. loaction $0D of the header does contain $00 value, this location should contain $02 value, like all c16 tap files i examined. manually changing the value from $00 to $02 (with the help of an hex editor) fixed the problem and tape loaded successfully in winvice

The Max7219.h library

Hello i was looking at the code and say there is a Max7219.h in the arduino ino. But in your files you do not have have the libray there. I don't know that library either. I know the Max7219 chip is a input/output driver for leds. But yet somehow the code compiles with no problem even if i don't have that library. Strage!!

I never saw a code compile with no errors with a missing library. Why is this?

Joseph

Automatic inversion handling

As I wrote on the forum, what about discarding the invert option and splitting the record command into "Record from Datassette" and "Record from computer", each of which handling the inversion of the signal automatically?

Load TAPs Hangs at 99%

Running taupino 2.8

Repro Steps:

  1. Choose Play
  2. Scroll to desired TAP filename
  3. Type in "Load"
  4. See message to press play button
  5. Press "Select" button on Taupuino
  6. Progress indicator goes from 1% to 99% on left while displaying "M<spinner symbol" on right (no idea what M means)
  7. See "Searching" message
  8. See "Loading" message
  9. See "Ready" message (while Taupino is at 99%)
  10. Can list or run program just fine
  11. Taupuino stuck at 99%. It will never complete. User must press "ABANDON"

Repository language incorrectly classified

Project classified as Stata repo on GitHub, but repository does not appear to include any code related to the Stata language. Please correct the language classification for your project. It will help make your project more visible where it should be and will avoid coming up in searches for Stata projects for others.

Problematic connection with sense and real datassette

From the schematic it seems the sense pin for both connector, c64 and real datassette, are tied together. However, the firmware only configure this pins as an output from the arduino perspective. That mean if a real datassette is plugged in, both datassettte and arduino will try to drive this signal, which is bad.

Questions about Tapuino functionality

Hello.

First of all, thank you for this great little device. I bought mine from Edu Arana, some time ago, but tested it just few days ago.
https://github.com/arananet/Tapuino-Reloaded

I have some questions that others might find interesting as well:

  1. Is there a PDF manual which describes all Tapuino functions and button combinations?
  2. Is there a way to play T64 files directly from SD card on Tapuino?
  3. If I use some save state functionality by Replay cart and dump state of C64 on floppy to restore it later, can I manually set position on Tapuino at exact percent where it was before I dumped state? For example 75% of loaded TAP file (FW, RW I suppose)?

Sorry if this was asked before. Thank you.

Datassette calibration function

Very simple: a function which samples pulses and shows a percentage or something like that. It may work like this:

  • Capture all the pulses occurring in a given time frame and store them only once each. If the number of unique pulses reaches a given maximum, assume no data or very bad alignment.
  • See how many different pulses we got. In a hypothetical perfectly aligned tape, we wouldn't get more than 2 or 3 pulselengths in total. The more pulselengths, the worse the alignment. So at this point, we may show a percentage or some description such as "Good", "Bad", and so on.
  • Repeat until "Stop" pressed.

Record Finalize

Hi
Anyone have any idea what the setting in the options "Record Finalize" does? Seems like it can be set from 500 to 2500
Would be interested to know.

Cheers Brad

6 buttons

At this moment are only 4 buttons implemented in software. For using a original housing of 1531 it will be nice to implement 2 more buttons.
RECORD for switching/toggeling recordmodes
EJECT for toggeling directories (as example)

Not a issue but I have a question

Hello you did a awesome Job on the tapuino for arduino. It works great, Thank you. But i have a question have you looked into maybe doing the sd2iec? I know there out there but not a arduino version.

Joseph

ESP32

Is there any project compatible with ESP32?

I was thinking of something like:

C64 TAPE PORT or IEC >> ESP32 >> wifi >> PC

Porting to Mega 2560 : problem after "found" message

I'm mixing your code with some iec code i've developed, to have both tape and disk support.
As the code for the disk may grow (a lot), and i've added a touchscreen, i've chosen a mega 2560 as target device.
But i'm getting a bit stuck with a problem: the load starts ok, but, after the "found xxx" message appears, looks like somewhere is not detecting the play button as pressed anymore: after the "found" message, i get a "LOADING" and then,again, "PRESS PLAY ON TAPE".

Any idea of what may be happening? (I ported the code to a mega 1280 without problems)
My pin assignment is (even pins from 35 to 41):

// port definitions, change for different wiring
#define SENSE_PORT PORTG
#define SENSE_DDR DDRG
#define SENSE_PIN 0
#define SENSE_ON() SENSE_PORT &= ~_BV(SENSE_PIN)
#define SENSE_OFF() SENSE_PORT |= _BV(SENSE_PIN)

#define TAPE_READ_PORT PORTC
#define TAPE_READ_DDR DDRC
#define TAPE_READ_PIN 0
#define TAPE_READ_PINS PINC
#define TAPE_READ_LOW() TAPE_READ_PORT &= ~_BV(TAPE_READ_PIN)
#define TAPE_READ_HIGH() TAPE_READ_PORT |= _BV(TAPE_READ_PIN)

#define TAPE_WRITE_PORT PORTG
#define TAPE_WRITE_DDR DDRG
#define TAPE_WRITE_PINS PING
#define TAPE_WRITE_PIN 2

#define MOTOR_PORT PORTC
#define MOTOR_DDR DDRC
#define MOTOR_PIN 2
#define MOTOR_PINS PINC
#define MOTOR_IS_OFF() (MOTOR_PINS & _BV(MOTOR_PIN))

Possibe bug while reading the tape buffer?

Hello,
For a small project i'm working in, i want to refactor some code out of the interrupt handler, specially calculating the pulse lengths in the main loop. That would produce a mismatch between the number of bytes read from the file, and the number of pulses to fire, as "overflow" bytes need 4 bytes if the version is not 0.
So, theoretically, to correctly convert X bytes from the file to pulses, i need to be sure the buffer grows, if necessary, up to X+3 bytes, in case the last byte read is 0x00 (overflow byte), and version is not 0.
So i went to check how this is managed in tapuino, but (correct me if i'm wrong) looks like a fixed chunk of FAT_BUF_SIZE bytes are read, and the isr code is supposing that, if a 0x00 byte is found, the other 3 bytes do exist in the buffer

 if (tap_data != 0) {
          g_pulse_length_save = tap_data * g_cycle_mult_8;
        } else {
          g_pulse_length_save =  (unsigned long) g_fat_buffer[g_read_index++];
          g_pulse_length_save |= ((unsigned long) g_fat_buffer[g_read_index++]) << 8;
          g_pulse_length_save |= ((unsigned long) g_fat_buffer[g_read_index++]) << 16;
         ...
   }

So, if a 0x00 byte is found at g_fat_buffer[FAT_BUF_SIZE-1], arent those lines accessing unitialized memory?

Save led, piezo to "listen to" the tape

Could be possible to implement:

  1. a red led that will lit when saving in progress?
  2. a piezo that play the music? :D for ability to listen loading/saving maybe turnable on/off in Options menu ;)
    i splitted the pause from led & piezo, since there is an hardware solution is better use it to save program space.. however a led connected to D13 (if isn't used for other things) could be useful and shouldn't use much program memory i think (D13 is already connected to a led on almost all arduinos) :)

The Evil Dead TAP 2698

Hi
I am having some problems loading this TAP file. The tapuino is a wagiminator SMD model running 2.10.0 firmware.
Every other TAP files seems to load ok (Rambo, Transformers, etc).
I have tried 250425 long board and seem to have more success on this revision. Game mostly loads but gameplay doesn't seem 100% correct so most likely some loading problems.
On a 250469 shortboard the game will not load not successfully. On loading, the game is found correctly and at around 10% loading there is a pause, then the expected rainbow loading screen appears which should last till end of the loading but at around 12% the loading screen will go a bluish colour and stay like that to 100%.
Do you have any ideas or possible solutions? Thankyou in advance for your time and assistance.

Cheers BT

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.