My C64 had a problem with previous attached speaker. It drew too much current to drive. And random characters where printed. Choosing another speaker and a minimal amplifier solved the issue. (Thanks to Bigred finding the problem at Bornhack 2024)
Today I made a Linux version of Tyrone’s QuickPath tool.
My friend Tyrone came up with a great idea.
A directory switching tool, to move around in often used directories. You can use a keyword to move around. These keywords are configured in a config file. Even starting Total Commander with preset directories. Work/Private/Programming environments. His version uses PowerShell, but he wanted a multiplatform version, so we have chosen to use Python on both environments.
My version uses Python and Bash. (Bash is used for a change directory workaround on Linux and bash completion.)
Source will be in Tyrone’s git when finished.
Options:
qp – lists config items with number and short key
qp 1 or qp c64demo – changes directory to below example
qp add c64demo /data/store/git/projects/c64code2024 – add a entry
qp del 1 – removes entry
qp mc tmp c64demo – starts midnight commander with left and right directories
Tomorrow some laser cutting, so let’s design some things to cut.
Jigsaw test – using engraving and cutting
Make a front for my bus manipulator
Make some cases for the game controllers (These are beta, and will be 3D printed at a later stage. My old 3D printer is slow)
Saw a cool game a while ago, and found some old code. There was no schematic, so I had to reverse engineer it using the Arduino code. This one uses a Micro Pro.
Build a working version, now I can use this as base to create other games. But first i’m going to rebuild it so it can use Wifi and uses a Lipo Battery. Making it usable without wires.
Rotary – set angle/speed (Press resets)
Blue – toggle angle or speed ( was rotary press )
Green – select digit to change
Red – Fire
Led – not completely working yet, shows color of player Wil be changed to addressable leds with more functions (Player color, energy warning and more)
Last week I bought an old Bornhack Badge. I thought it needed a display.
Using a SSD1306 display, and Circuitpython I made this.
( Wooded thingy contains an RFID chip ( Part of my player ))
Library and files needed:
font5x8.bin in root of filesystem ( just google for this file )
copy of adafruit_framebuf.mpy in /lib
copy of adafruit_ssd1306.mpy in /lib
Code: (midway some pixel examples, just uncomment)
import board
from time import sleep
import busio
from PN7150 import PN7150
import adafruit_ssd1306
import math
import adafruit_framebuf
if True:
# Fast 400KHz I2C
i2c = busio.I2C(board.SCL, board.SDA, frequency = 400000)
else:
# Regular 100kHz I2C
i2c = board.I2C()
WIDTH = 32
HEIGHT = 8
buffer = bytearray(round(WIDTH * math.ceil(HEIGHT / 8)))
fb = adafruit_framebuf.FrameBuffer(
buffer, WIDTH, HEIGHT, buf_format=adafruit_framebuf.MVLSB
)
nfc = PN7150(i2c, board.IRQ, board.VEN)
display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c,addr=0x3c)
assert nfc.connect()
print("Connected.")
assert nfc.modeRW()
print("Switched to read/write mode.")
display.fill(0)
display.show()
#display.fill(0)
#display.text('Hello', 0, 0, 1 )
#display.text('World', 0, 10, 1)
#display.show()
# Set a pixel in the origin 0,0 position.
#display.pixel(0, 0, 1)
# Set a pixel in the middle 64, 16 position.
#display.pixel(64, 16, 1)
# Set a pixel in the opposite 127, 31 position.
#display.pixel(127, 31, 1)
#display.show()
while True:
display.fill(0)
display.text('Waiting for card', 0, 0, 1 )
display.show()
assert nfc.startDiscoveryRW()
print("Waiting for card..")
card = nfc.waitForCard()
assert nfc.stopDiscovery()
print("ID: {}".format(card.nfcid1()))
id = card.nfcid1()
display.text(id, 0, 10, 1 )
display.show()
sleep(0.5)
Not sure about display i2c address? Use below code
import time
import board
import busio
# List of potential I2C busses
ALL_I2C = ("board.I2C()",)
# Determine which busses are valid
found_i2c = []
for name in ALL_I2C:
try:
print("Checking {}...".format(name), end="")
bus = eval(name)
bus.unlock()
found_i2c.append((name, bus))
print("ADDED.")
except Exception as e:
print("SKIPPED:", e)
# Scan valid busses
if len(found_i2c):
print("-" * 40)
print("I2C SCAN")
print("-" * 40)
while True:
for bus_info in found_i2c:
name = bus_info[0]
bus = bus_info[1]
while not bus.try_lock():
pass
print(
name,
"addresses found:",
[hex(device_address) for device_address in bus.scan()],
)
bus.unlock()
time.sleep(2)
else:
print("No valid I2C bus found.")
While attending Bornhack 2024 in Danmark, I came up with the below fun ideas.
Using Python and OpenCV, I made some funny webcam hacks.
Note: My laptop webcam is very bad, a better webcam should give you a more stable result.
First, a virtual workspace flipper. Just using my head movement to flip through my virtual desktops. (Turning left and right)
Next, an image viewer. Using your head movement up, down, left and right to control the image. Note : this is not the same movement as above. This won’t use rotation of your head!
Although there are bad hackers (black hat), the term hacker is being used to describe people who are using technology alternative or even hack food and drinks. Create something new or improve. Mostly using computers, but think of it in a broad way. Programming, 3D designing or printing. Learning new things.
We (me and my girlfriend) went with Bigred (and his girlfriend) and Tyrone. Both good old friends.
With Bigred I made a mini C64 Badge in the last few months. With Tyrone I started coding 6502 Machine Language again. (Planning to release a demo at X2025)
Old badges I boughtExplaining my compile pipeline to TyroneSoldering bus manipulatorCampsite
Stuff I did there:
Programming demo parts (Sprite multiplexing, Music Sync)
Made some demo graphics
Programmed some shaders
Circuit Python hacking on the Badges, no new one this year 🙁
Soldering my Bus Manipulator
Python to generate SIN tables (acme output) !byte $CA,$FE,$BA,$BE
Coding 101 with Tyrone (Acme pipeline, Git and MircoPython on his MCH badge)
Drank too much
Slept too short
Removing gallons of rain water from Tyrone’s tent.
Mini shader in GLSL language
After a week of hacking, we went for a short holiday in Denmark.
Visiting Viking Museums, Old cosy towns, WWII bunkers, the Beach and more. Driving back to the Netherlands, we visited the only surviving VII-C U-boat in the world. (Same as I 3D printed for the Uboot game)
The lone surviving example, U-995, is on display at the Laboe Naval Memorial located in Laboe, Schleswig-Holstein, Germany
I’ve connected the rotary encoder directly to the zero. Although many websites state that you need pull-up resistors, there is no need. Just use the internal pull-up resistors in the Pi.
Example code
GPIO.setmode(GPIO.BCM) # Use BCM mode
GPIO.setup(self.24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(self.25, GPIO.IN, pull_up_down=GPIO.PUD_UP)
NOTE: Between 24 and 25 is a GND connection
Besides USB HID below XT, C64 and Amiga connectors will be emulated
C64XTAmigaC64
"If something is worth doing, it's worth overdoing."