Badge for Hackaday Conference 2018 in Belgrade

In the 1980's, you had to know programming to use computers. They were used for... guess what? Computing! Want to see how it looked?

Similar projects worth following
In May 26th 2018, there will be the next Hackaday Conference in Belgrade. The badge will be a battery powered stand-alone personal computer, similar to ones used in 1980's, but much smaller and more compact.Get your ticket now: badge has a 55-key keyboard and RGB TFT LCD screen with 320×240 resolution. The processing unit is contained in the microcontroller PIC32MX370F512H, with 512/128 K of internal program/data memory.The production version contains an external 2 MByte FLASH and an audio circuit with speaker. The prototype on the image is the first sample (ver.1.0), without FLASH and Audio, but schematics and PCB project are ver.2.0.

All ticketed attendees of the Hackaday Belgrade conference will receive a Retro Computing badge. Get your ticket now and join us in Belgrade on 26 May!

Table of Contents:

An amazing badge for an amazing conference. The Hackaday Belgrade hardware badge is itself a retro computer, running a BASIC interpreter, and emulating a Z80 computer with the CP/M operating system.

This badge plays music, it has a color screen, serial communications functionality is built into the expansion header, and it's ready for hacking! The evening of the conference we'll turn the venue into a hardware hacking village. Hardware demos and presentations will continue inside the village, along with lightning talks, live EDM and DJ sets, food, drink, and the best time you can have this Spring!

Study this project log and get to work planning your badge hacks!

For a detailed BOM, please visit


Gerbers (panel with 3 PCBs)

x-zip-compressed - 3.78 MB - 05/16/2018 at 14:38



PCB file (Circuit Studio format) For a detailed BOM, please visit

cspcbdoc - 3.86 MB - 05/16/2018 at 14:36


  • Hackaday BASIC Interpreter

    Mike Szczys05/14/2018 at 21:55 6 comments

    The Hackaday BASIC interpreter is based on the uBASIC project by Adam Dunkels. This provided a tokenizer and the most rudimentary words needed for the language to operate. From there, Jaromir Sukuba greatly expanded the word set to take advantage of the best the badge hardware has to offer.

    The reference for all of the words is listed below. You may also see examples of these words in use by viewing the example code project log.

    Of Note:

    • Code in the program buffer can be viewed one page at a time by typing more. You can overwrite lines just by typing the line number at the prompt along with your new commands. It is recommended that you number every 10 lines or more so that you can add commands in between them as you develop your code.
    • The clr word will clear the code currently in the program buffer. Be careful not to use this word when you intended to use clrscr
    • There are two print commands. print will not include a line feed, println will include a line feed

    BASIC Word List:

    Standard Words:

    • print
    • println
    • if
    • goto
    • gosub
    • return
    • for
    • next
    • end
    • let

    Badge Custom Words

    • led X,Y - control LED, X[0..2] RGB, Y[0..1] on/off
    • tune A,B,C,D - plays tones A, B, C for duration D
    • clrscr - clear screen
    • setxy X,Y - set cursor at X,Y
    • wait X - wait for X ms
    • color X,Y - X=Foreground, Y=Background using EGA 16-color palette
    • chr X - prints character with ASCII representation X
    • termt X - sets VT100 terminal on or off (1-on, 0-off)
    • rnd X - function to return random number 0..X
    • ein X - function to return value of expansion pin X
    • eout X,Y - control expansion pin, X[0..3], Y[0..1] on/off
    • edr X,Y - sets expansion pin function X[0..3], Y[0..1] output/input

    BASIC CLI commands

    • run - runs program
    • save X - Save program buffer to flash. There are 16 slots: X[0..15]
    • load X - Load program into buffer from flash. There are 16 slots: X[0..15]
    • list - list whole program
    • more - list program by pages
    • clr - clears all code from the program buffer
    • free - prints amount of free program buffer
    • sload - load new program into buffer from serial port
    • ssave - output program buffer via serial port

  • BASIC Program Examples

    Mike Szczys05/14/2018 at 21:47 0 comments

    Print out all possible characters:

    10 for i=32 to 255
    20 chr i
    30 next i

     Bling the LEDs randomly (d is diode [0..2], s is state [0..1])

    10 d = rnd 2
    20 s = rnd 1
    30 led d,s
    40 print “Press BRK to return to BASIC prompt”
    50 wait 100
    60 goto 10

     Play random Major triads:

    10 let i = rnd,77
    20 if i<53 then goto 10
    30 tune i,i+4,i+7,400
    40 goto 10

     Scroll some text. The space before the text erases the previous character in that position:

    10 let i=0
    20 color 14,12
    30 clrscr
    40 setxy i,0
    50 print " Scroller"
    60 i=i+1
    70 wait 150
    80 if i<32 then goto 40
    90 color 15,0

     Bounce ball on screen. Shows moving to different areas on screen, changing color, using delays and subroutines, and manual screen refresh (term 0 shuts off automatic scanning, termup triggers manual refresh) for a smoother animation than the scroll text example:

    5 termt 0
    10 let x = 39
    20 let d = 0
    30 clrscr
    40 color 11,0
    50 setxy x,10
    60 chr 32
    70 if d = 1 then gosub 200
    80 if d = 0 then gosub 300
    90 chr 254
    95 termup
    100 if x = 0 then d = 1
    110 if x = 39 then d = 0
    120 wait 50
    130 goto 50
    200 x = x + 1
    210 return
    300 x = x - 1
    310 setxy x,10
    320 return

  • Music Syntax and Guide

    Mike Szczys05/14/2018 at 21:46 0 comments

    This badge has a built-in speaker and you can compose music for 3 voices using a simple scripting language. Use the BASIC interpreter to access these features with the syntax: 

    tune voice1,voice2,voice3,duration

    Duration is the number of milliseconds this chord should be held. The voice values use Scientific Pitch Notation ( where middle C is 60. Do a C major chord held for 1 second would look like this tune 60,64,67,1000 -- below is a cheat sheet.

    PRO TIP: Remember BASIC programs can be saved in any of 16 slots (0..15) using the save/load commands.

    As an example, try typing this into your BASIC interpreter (you may want to type clr before your start to clear any existing code):

    10 tune 0,0,72,131
    20 tune 0,0,74,131
    30 tune 0,0,77,131
    40 tune 0,0,74,131
    50 tune 70,74,81,262
    60 tune 0,0,0,131
    70 tune 70,74,81,393
    80 tune 60,76,79,524
    90 tune 0,0,0,131
    100 tune 0,0,72,131
    110 tune 0,0,74,131
    120 tune 0,0,77,131
    130 tune 0,0,74,131
    140 tune 69,72,79,262
    150 tune 0,0,0,131
    160 tune 69,72,79,393
    170 tune 62,69,77,393
    180 tune 62,69,76,131
    190 tune 62,69,74,655

  • Serial Communications with Badge

    Mike Szczys05/14/2018 at 21:46 4 comments

    A serial-to-TTL cable will allow you to communicate between the badge and a computer. If you own one of this cables we highly recommend you bring it with you! We will have cables on hand but it will be necessary to share them so extras are great!

    Wiring Diagram:

    • Badge Pin Ground (GND) --> Ground on serial cable
    • Badge Pin TX (C14) --> RX on serial cable (White in this example)
    • Badge Pin RX (C13) --> TX on serial cable (Green in this example)
    • Important: Leave voltage disconnected (Red in this example)

    Serial Connection Info:

    • Baud: 19200 8N1
    • In basic, use command ssave to send program buffer as string
    • In BASIC, use command sload to recieve string into buffer
    • CP/M includes xmodem. Check your computer's serial program to ensure it supports this protocol. In the Z80 Emulator, switch to b: drive and run command similar to this: xmdm r d:FILENAME.EXT

    Linux: Simple Instructions for Transferring BASIC Programs

    This quick walkthrough assumes that USB to TTL serial cable will enumerate as /dev/ttyUSB0. Look at dmesg output after plugging cable to ensure this is true.

    Setup simple Linux serial connection:

    • dmesg and look for where the serial cable is mounted
    • sudo chmod 777 /dev/ttyUSB0 #Make sure you have access to the USB port
    • stty -F /dev/ttyUSB0 19200 #Set proper baud rate
    • stty -F /dev/ttyUSB0 #Check to make sure rate was set correctly

    Send a File to Badge

    • On the badge, type sload into BASIC
    • On computer type: cat basic.txt > /dev/ttyUSB0
    • On the badge, press BRK

    Receive a File from Badge

    • On computer type: cat /dev/ttyUSB0 > newbasic.txt
    • On the badge, type ssave
    • On computer type CTRL-C

  • Toolchain for Programming in C

    Mike Szczys05/14/2018 at 21:46 0 comments

    You will need a PIC programmer to write your own HEX files onto the badge. PICkit 3 and PICkit 4 have both been tested to work as programmers via the pin header on the badge.

    The BASIC badge is based around a PIC32MX370F512H. Software is compiled using MPLABX, XC32 compiler, and legacy peripheral libraries from Microchip.

    1. Download three packages:
      • Navigate to the Downloads" tab at the bottom of the Microchip Compilers page.
      • Download MPLAB® XC32/32++ Compiler v2.05 for your operating system
      • Download PIC32 Legacy Peripheral Libraries for your operating system
      • Navigate to the "Downloads" tab part way down the screen at the Microchip MPLAB X IDE page.
    2. Install the packages:
      • Install the XC32 compiler first
      • Install the peripheral libraries next. IMPORTANT: You must specify the same directory as the XC32 compiler. This will likely not be the default option during install. For Linux installation this director was: /opt/microchip/xc32/v2.05/
      • Install MPLABX IDE
    3. Open the MPLABX project from this repository
      • A PIC programmer like the PICKIT3 is required to program your badge
      • On the PIC programmer, pins 1-5 correspond to RES, V+, GND, B0, and B1 on the badge

  • Hardware Hacking

    Mike Szczys05/14/2018 at 21:44 0 comments

    Coming soon

  • Reserved for Future Use 3

    Mike Szczys05/14/2018 at 21:42 0 comments

    There's a lot to document so we're keeping a few logs as placeholders.

  • Reserved for Future Use 2

    Mike Szczys05/14/2018 at 21:41 0 comments

    There's a lot to document so we're keeping a few logs as placeholders.

  • Reserved for Future Use

    Mike Szczys05/14/2018 at 21:41 0 comments

    There's a lot to document so we're keeping a few logs as placeholders.

View all 9 project logs

Enjoy this project?



Aleksandar Milovac wrote 2 days ago point

Batteries are included or not?

  Are you sure? yes | no

Voja Antonic wrote 2 days ago point

Included. You'll get the fully functional badge.

  Are you sure? yes | no

Aleksandar Milovac wrote 2 days ago point


  Are you sure? yes | no

Radoslav Dejanović wrote 6 days ago point

Umm.. wouldn't it be more intuitive to clear memory with "memclr", and leave "clr" to erase screen? I guess that most people are used to "clr" the screen, and clearing screen would be much more used than clearing memory, I guess... 

  Are you sure? yes | no

jaromir.sukuba wrote 6 days ago point

That is good suggestion. I'm going to change that.

  Are you sure? yes | no

Morning.Star wrote 5 days ago point

Hey Jaromir. Yay Z80 :-D

As I recall most basics used CLS to clear the screen, I never encountered a 'CLR' command...

  Are you sure? yes | no

Aleksandar Milovac wrote 2 days ago point

Agree with @Morning.Star and @Radoslav Dejanović  -
  cls is more appropriate for clearing the screen  and memclr for erasing the memory.

  Are you sure? yes | no

jaromir.sukuba wrote 19 hours ago point

@Aleksandar Milovac @Morning.Star  it is already done, current firmware does have both changes (memclr to clear memory and cls or clr as alias to clrscr).

  Are you sure? yes | no

Kevin Elliott wrote 05/16/2018 at 17:12 point

Would be awesome to be able to buy one of these, for those of us not able to attend the conference!

  Are you sure? yes | no

Mike Szczys wrote 5 days ago point

If we do have extras we will sell them. Conference is looking pretty full at this point and we didn't a big overrun... but do keep your eye on Hackaday for an announcement afterward.

  Are you sure? yes | no

asorc wrote 3 days ago point

I fully agree with this...

  Are you sure? yes | no

danjovic wrote 05/14/2018 at 22:46 point

I just loved the simplicity of the circuit!

  Are you sure? yes | no

Mike Szczys wrote 5 days ago point

I'm shocked by how much this badge can do. It's been really fun watching Voja and Jaromir work on this during development!

  Are you sure? yes | no

Marcel van Kervinck wrote 04/20/2018 at 22:08 point

Considering to see if it will be able to run Gigatron ROM v1. Any thoughts?

  Are you sure? yes | no

Nicu wrote 04/14/2018 at 21:21 point

It would have been nice to have had the verbs for each key (like FOR, RAND, RUN, PLOT, etc) instead of the keys printed on the PCB, but I guess that this would have take to much space. Well, I will come with a cheatsheet then :P

  Are you sure? yes | no

bosko wrote 03/26/2018 at 13:59 point

BASIC support Serial Communication, will this hardware badge support same ?

  Are you sure? yes | no

James Hall wrote 03/20/2018 at 15:18 point

Needs a 3.5mm jack for an old school tape interface :)

  Are you sure? yes | no

Ian Hanschen wrote 03/19/2018 at 22:38 point

ink and paper (foreground/background colors) are oddly named - it's not a sheet of paper, it's a screen... Hope that's not a theme. :)

  Are you sure? yes | no

Mike Harrison wrote 03/19/2018 at 22:22 point

Presumably external flash is for file storage, but why no SD card socket for easy file transfer? 

  Are you sure? yes | no

x-labz wrote 03/20/2018 at 09:38 point


how to share the BASIC programs, I'm going to type in?

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates