/fpga-tamagotchi

Tamagotchi P1 for Analogue Pocket and MiSTer

Primary LanguageSystemVerilogMIT LicenseMIT

Tamagotchi P1 for FPGAs

Promo Image

This core is an original creation by @agg23 over the course of 3 months. It is based strongly on the original documentation for the Tamagotchi CPU (see Documentation Overview), but also takes some learnings from tamatool, and is inspired by @Mazamars312, Andrew Wilson, and Robert Piep, who gave me helpful advice along the way. The amazing backgrounds were recreated from source material by @bmarvo, and the Pocket platform icon was created by me. See Licensing for more information.

Currently supported platforms are the Analogue Pocket and MiSTer.

Installation Instructions

See Platform Installation Instructions for platform-specific instructions on how to install the core. It also contains information on what ROMs you need.

Manual

If you've forgotten how to use the Tamagotchi in the nearly 30 years since it's release, check out the official manual.

Features

Savestates/Sleep + Wake

Known as "Memories" on the Pocket and "savestates" elsewhere this core supports the creation and loading of savestates, and by extension, the core also supports the Pocket Sleep + Wake functionality. Tapping the power button while playing will suspend the game, ready to be resumed when powering the Pocket back on.

On MiSTer, you must remap your controls in order to bind one of the to the Savestate control. Once done, holding that button and D-pad left/right will allow you to choose your savestate slot, and holding that button in addition to start (if they are different) and D-pad up/down will allow you to load and create savestates in that slot.

Automatic Restoration

Tamagotchi will automatically restore where you left off, as a suppliment to the savestate functionality. Quitting the core on Pocket, or opening the OSD on MiSTer, will cause the core to take a savestate (separate from your 4 slots on MiSTer) that will be automatically restored on core launch.

Turbo

Tamagotchi supports several incremental levels of turbo. These are displayed in the menus and turbo OSD as: 1x, 2x, 4x, 50x, and Max. At the moment, Max represents a 1,800x turbo, with the intention of allowing you to quickly evolve your Tamagotchi, or simulate days passing.

By default, the current turbo speed can be adjusted by using the shoulder buttons; left trigger decreases the turbo, right trigger increases it.

Additionally, there are several settings that configure the turbo behavior, including stopping turbo on the next "event".

Custom Backgrounds

This core supports custom backgrounds, and even ships with a Tamagotchi P2 background as an example. See the Installation Instructions and the Image Generation Tools pages for more information.

Settings

  • Reset - Use this button to start the Tamagotchi over from scratch. Please note that this will completely remove your existing Tamagotchi unless you have a dedicated savestate for it

Sound Settings

  • Disable Sound/Sound - Allows you to enable/disable the sound. For the Pocket's Disable Sound option, enabling the option (filling in the checkbox) will turn off the sound

Turbo Settings

  • System Speed - Enables direct setting of the turbo speed, separate from the trigger controls. The core can override this set speed depending on your settings, or if you create/load a savestate
  • End Turbo on Event - When enabled, stops turboing (switches to 1x) when an "event" occurs. An event is classified as any sound generated by the core, which only occurs when the Tamagotchi is requesting attention, a jingle for a game is playing, or you've pressed a button
  • Skip Event at Turbo Start - When Tamagotchi requests attention, it plays several beeps in a row. This setting ignores beeps for 5 in-game seconds after starting turbo. This allows you to turbo, hit an event (and stop the turbo), then immediately start the turbo again and not get kicked right back out

Display Settings

  • LCD Type - Customize the look of the LCD pixels that make up the Tamagotchi display
    • Solid Pixels - Every pixel takes the full space; the off LCD pixels are transparent
    • Separate Pixels, No Background - Pixels have a small gap between them; the off LCD pixels are transparent
    • Separate Pixels, With Background - Pixels have a small gap between them; the off LCD pixels are visible and dim the background beneath them

Core Docs

I've tried to be thorough with my design decisions and provide/update various supporting documents through the process. See the /docs folder, or start looking at the overview. There's documentation on the tools I built, how the microcode works, how to run tests, and more.

FAQ

Issue Solution
I see a corrupted screen, often blank or all pixels on Open the core settings and choose Reset. If you attempted to boot the core without the correct ROM, or you accidentially chose a different file as the ROM, this is expected. Otherwise, please file an issue.

Licensing

There are a lot of components to this project, and the licensing on them depends on where they came from and potentially how they're used.

Contents License
The main repo, all Tamagotchi core code, all tools and tests, and the documentation (other than the docs owned by Epson) MIT
All Pocket platform code, Pocket core_top.sv, and any Pocket specific components (unless otherwise noted) MIT
All MiMiC/MiSTer platform code, MiSTer core_top.sv, and any MiSTer specific components (unless otherwise noted) GPLv3
All "sprite" activity icons and backgrounds CC0