I have targeted the following M5 Stack models with my C64/C128/Vic-20/Apple 1 emulator : M5Stack Fire IoT M5 Core2 M5 CoreS3 (Even though I have targeted other boards, I had only implemented touch on the CoreS3) The primary reason for targeting these boards was the common 2" 320x240 display perfect for most C64 emulation, and the availability of a wristband that works with Core2 and CoreS3 (it…
Teensy in green, ESP32-C3 in blue I have a Teensy 4.1 operating as a Commodore 64 (and Vic-20, and 128, and Apple 1) emulator. It already supports USB Host (via 5 pin header on top) and web page helper (via USB CDC). The Teensy doesn't have wireless capability, but I wanted to add BLE keyboard support. So enter the ESP32-C3 as a coprocessor. It is running a custom firmware using the NimBLE library…
Tab5 Keyboard is a convenience add-on I added native keyboard support to my emulators already running on M5Stack's Tab5. There were already 64/Vic-20/128 original keyboards , CardKB , web page adapter , Palm Portable Keyboard , and custom BLE support . Now there is also attached keyboard accessory support. The Tab5 is a 5" ESP32-P4 handheld tablet with high resolution 1280x720 LCD. The keyboard…
Finally, Commodore 128 can provide the 80 column screen that multiple monitor folks need - extended screen. Spread those columns across two separate monitors for a wider view. Instructions Download disk image , and use as is with modern tools, or image to floppy. Click the 80 column keyboard button into position to make it the default. Attach two monitors to your C128. Composite on the left,…
AI: What could go wrong?🤔 Don't get me wrong. I love AI. I also hate AI. It's been great to me for writing C# utilities for work, or SQL queries, reviewing code, writing scripts in languages I don't even know (LUA) -- yeah that looks right, let's put that in production. But for Commodore? Spoilers -- it's really horrible. I'll get back to that later. My "fun" task for the day? I want to finally…
The whole reason for my latest projects was to integrate and use controllers with Cardputer Game Station. It supports emulation of some of my favorite consoles and thus their games. Link: https://github.com/davervw/Cardputer-Game-Station-Emulators Firmware is also posted on M5Stack M5Burner Atari 2600 Atari 7800 GameBoy GameBoy Color NES I have some of the original consoles myself and a collection…
My goal is to play some games on ESP32 hardware. One step to get there is create a test app to pair with existing game controllers. Classic (not the newest) ESP32 boards support Bluetooth Classic and BLE. ESP32-S3, C3, C6 for examples only support BLE. ESP32-P4 doesn't support wireless directly at all, it uses a C6 as a wireless coprocessor. Thus it's useful to see what controllers you can attach.…
It's not just another pretty face. Time to get serious about retro gaming. Up, Left, Right, Down, Fire (M5) and second button (click joystick). Not just a d-pad. Is also mirrored as xpot, ypot, so can do paddle games, or analog joystick games. Go play some games! Link: github.com/davervw/m5_minijoystickc_gamepad Also posted on M5Stack M5Burner
It's finally here! After years of anticipation and a weird workaround, the ideal solution is implemented and working. I can finally use my Palm Portable Keyboard (PPK) with my custom emulators for Commodore 8-bits. Github: ppk_bluetooth_for_cbm PPK BLE adapter for wearable/portable emulators of 8-bit CBM systems History The Palm Portable Keyboard was released for the Palm Pilot PDA lineup in late…
There's a new game in town. And by new, I mean old. Name that game and controller. Link: https://github.com/davervw/ble_gamepad_KanoPixelKit Update (23 May 2026): The original firmware was custom BLE driver. The new firmware is standard BLE driver so works with Windows, Android, etc.
Keymap Editor for C64 This utility (available from github ) allows the user to specify how to remap physical key locations on the Commodore 64 keyboard to different PETSCII keystrokes. The original intent is to put punctuation keys where they are supposed to go compared to modern keyboard layouts. If one is using an authentic keyboard or equivalent then you may reach for the wrong key if trying to…
How do you write a snake game? Very carefully. ;-) Open source at GitHub For me, it started as an idea to make a featured game for my handheld Commodore emulator platform, most importantly the ones I can easily transport on my person. I've written a simple but not complete Commodore emulator that behaves well on ESP32 and other available microcontrollers. One example hardware platform is the…
Here is a single player version of the classic snake game that I have recreated in BASIC for the Commodore Vic-20. Some may remember snake from the Nokia classic phones (1998) or from Atari VCS 2600: Surround (1977). I have a Commodore watch platform (M5Stack with watch wristband running my Commodore emulators ) which I can run some simple programs. The purpose of developing this game was to…
The Commodore 64 keyboard may display unexpected characters when joystick #1 is used. There is a solution! Avoid the keyboard when scanning the joystick, and exclude the joystick data when scanning the keyboard. But somewhat easier said than done. Tracing the source of the issue is that PORTB of CIA1 is connected to the keyboard and first joystick simultaneously. Normally the C64 KERNAL IRQ will…
This is an alternative take on the previous article Adafruit ST7789 TFT display with Arduino GFX Library and M5StampS3 . This time with a generic display, and a different MCU (ESP32-C3). This one has a single RISC-V core (instead of dual core Xtensa). So excuse the repeated text, the content has been changed only slightly for the different hardware... Attaching a display to a circuit can provide a…
Attaching a display to a circuit can provide a lot of detailed info and graphical value. While "a picture is worth a thousand words," an animated display can be entertainment value, textual information can be informative, and add an input device, and the system can be interactive with billions of possibilities. The tricks in embedded development is choosing the right display, having the right…
It's August 2024. I've just bought a new (to me) Vic-20 for US$50 to replace my childhood one. I already have the PenUltimate Vic-20 Cartridge with a ton of games. I also bought a Hyperkin Trooper joystick. But I want to game wirelessly! I've already had great success with a BlueRetro Nintendo GameCube controllers wireless adapter with my original Wii game console. I purchased it on ebay for a…
The C128 team invented the GO64 command for compatibility. Years ago I claimed to invent the GO128 command, and GO20 and some others. My Commodore emulator (unified branch) that supports Windows and LCD targets including compact watch form factor, now supports an argument to the GO statement to specify the total memory to configure. The Vic-20's memory map looks roughly like this. // (from…
Save has been added to my 6502 monitor program for the C64 version. The video above demonstrates creating a very simple 6502 program to output printable characters to the screen, and saving that program to disk. Loading is not implemented, but you can easily use BASIC for that task as demonstrated. Not explicitly shown is the X command to exit to BASIC. The new save syntax is in the following…
This snapshot feature is for the minimum 6502 emulation target included in c-simple-emu6502-cbm (unified branch) . (This is a bare bones 6502 target with CPU/RAM/ROM/UART. The UART is MC6850. See SWEET-16 and vwas6502 previous discussions.) Ooo. The screen is so fancy. F2 or F3 to bring up this screen. Up/Down make a selection. Return performs load or save for that slot, or return on the slot…
6502 mini-assembler help system The help system recently added to the 6502 monitor ( vwas6502 ) includes help commands monitor commands reference 6502 instruction set mnemonics 6502 addressing modes references, listing valid instructions opcodes with addressing modes available for a specific instruction mnemonic In observation, that required a bit of ROM memory. The monitor is currently at 4K with…
Sample assembly entry and run example Links Source at github D64 and PRG from github (Commodore 64) BIN for ROM (minimum system 6502 + MC6850 + RAM + ROM) Everyone (in a small corner of the retro programming community) has their favorite machine language monitor. Mine is HESMON for the Vic-20 which I got in the early 80s. I probably also used TinyMon, and have used SuperMon in recent years. The…
Disassembler disassembling WozMon WozMon is a great little monitor program in 256 bytes which Steve Wozniak wrote for his Apple 1 release in 1976. It was small but powerful allowing for memory inspection, entry of 6502 machine code programs and bytes, and launching of programs in ROM and RAM (jumping to address). But being small, it is missing features that monitor users have learned to depend on,…
Directory listings scrolling by too fast? Want to scan program for string literals? Here's a stupid (sometimes useful, definitely ugly) utility I created in the monitor for both scenarios. Compact display and pauses every 24 lines. Attempts to avoid control characters. Note: operates on whatever loaded program is in memory, assuming BASIC. Shown loading into tape buffer (828), can be relocated.…
While adding banking support to my own C64 emulator back in the good 'ole days (April 14, 2020, maybe only good for hunkering down on retro stuff), I also wrote a test program to help verify the results. This may help you visualize how you can access more RAM and ROM on the C64. The program works by switching to the RAM only bank writing a signature high byte to four addresses, then cycles through…