Building Quico: improved sound, gamepad, and more (part III)

This is the third blog-post regarding “building a video-game console for (my) kids”. See Part II: chiptune, and Part I: gamepad.

Quico

We have name: Quico. From now on, I’ll refer to this project as “Quico”:

  • Quico (/ˈkiko/), short for Kids Console (or Kids Computer)
  • Also, one of the main characters of El Chavo del Ocho

Sound Shield

I converted the breadboard into “shield” for the MatrixPortal M4.

Shield for the MatrixPortal M4

“Shield” features:

  • Output:
    • Headphones: Audio jack
    • or Speaker: 5V/GND/AudioOut pins
  • Fits perfectly on top of the MatrixPortal M4
  • Sturdy connection: 8 pins + 2 screws
  • Easy to solder: All components are through-hole, except audio-jack (SMD) but it is as easy to solder as the rest.
  • Open source / open hardware (docs, schematics, layout)
Shield + MatrixPortal M4 + LED matrix

Improved sound API

The sound API was improved:

  • Added new “sync” methods (functions that return when music ends)
    • To be used mostly from CircuitPython REPL console
    • But can be used for simple games as well
  • Improved “async” VGM player
    • Easier to use

Examples of improved APIs:

import music76489
m = music76489.Music76489()

# Sync APIs: can be used from REPL,
# like if you were using BASIC in a Commodore 128

# To play certain frequencies
m.play_freq(voice, freq)

# To play noise
m.play_noise(mode, shift_rate)

# To play notes: supports different voices, duration, semi-tones, and more.
m.play_notes('CDEFGAB')

# To set the volume
m.set_vol(voice, volume)

# To just play a VGM song:
m.play_vgm('data/mysong.vgm')

# Async API:
m.load_vgm('data/mysong.vgm')
while True:
  m.tick()
  time.sleep(1/60)

Latest version can be found here:

Improved gamepad support

# To change gamepad LED color.
# Valid for DualShock 4. DualSense coming soon.
spi.set_gamepad_color_led(gamepad_seat, rbg_color)

# To change gamepad players LED.
# Valid for Nintendo Switch, Wii, Wii U and other gamepads
spi.set_gamepad_player_leds(gamepad_seat, leds)

# To set rumble (AKA force-feedback).
# Valid for DualShock4, Xbox One S, Nintendo Switch controllers
spi.set_gamepad_rumble(gamepad_seat, force, duration)

Latest version can be found here:

Parts

Official git repository

Quico-related stuff is hosted here: https://gitlab.com/ricardoquesada/quico

TODO

The project is still in its early stage, so there is many things left to do. To name a few:

  • Write games!
  • Write documentation
  • 3d-printed enclosure/border
  • Polish

Published by ricardoquesada

cocos2d, unicyclist, commodore 8-bit

One thought on “Building Quico: improved sound, gamepad, and more (part III)

Leave a comment