ZPP

Zephyr C++ Framework

ZPP
/img/zpp_logo.png

Warning: ZPP is very much experimental/alpha quality, and non backwards compatible changes can (and will) be made at any time.

ZPP is a C++ wrapper for Zephyr so the OS API’s can be used more easily from C++.

It is not the intention of ZPP to implement a std:: library for Zephyr. ZPP tries to wrap the Zephyr C-API in C++20 without causing to much runtime and/or memory overhead.

ZPP tries to use RAII for things like locking and unlocking mutex’s comparable to the standard C++ library. Different from the standard C++ library ZPP does not use exceptions and it tries to not use dynamic memory allocation.

[Read More]

SID Bridge

Cortex M3 + FPGA Based SID player

SID Bridge

In 2020 I made a SID player based on a Lattice MachXO2 that was connected via SPI to a STM32G4 board running Zephyr.

/img/sid_setup.png

Now I got a Trenz SMF2000 board that has a Microsemi SmartFusion2 that has a Cortex M3 and a FPGA on one chip, so connecting the CPU to the FPGA is a lot easier. Instead of going via SPI from CPU to FPGA, it is possible to use a AHB bus to connect the CPU to the FPGA fabric. The connection from the FPGA to the SID chip still needs the 5 address + 8 data + clk + cs + rw + rst = 17 pins like with the previous setup.

[Read More]

Apple pie from scratch

Designing a pipelined RISC-V SoC

Apple pie from scratch

If you wish to make an apple pie from scratch, you must first invent the universe.

The famous quote from Carl Sagan could also be applied to computer science, if you want to make a program from scratch you must first invent the universe. Since I only had 2 weeks vacation, and inventing a whole universe would have been to much work, I skipped a few parts and started with designing a RISC-V core.

[Read More]

SPI SID

FPGA Based SPI to SID bridge

SPI SID

The MOS Technology 6581/8580 SID (Sound Interface Device) is the almost 40 year old sound chip that was used in the famous Commodore 64. It uses a 5bit address / 8bit data synchronous bus with a chip select, rw, and clock signal. Since the chip uses the 1MHz (well not exactly 1MHz as I’ll explain later) clock signal also to generate all the audio frequencies, so it is important that the clock signal is stable, even though the read/write access would work fine with a unstable clock as long as the signal setup times are correct.

[Read More]

Rockstar

The Art of Code

Rockstar

To understand what this is about you absolutely should watch Dylan Beattie’s brilliant presentation about The Art of Code.

Now you know Rockstar is a computer programming language designed for creating programs that are also hair metal power ballads.

The famous Fizzbuzz program looks like this.

Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart

Give back your heart


Desire is a lovestruck ladykiller
My world is nothing
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top

If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top

If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top

Whisper my world

On the rockstar website you can try it online. There are several implementations of Rockstar interpreters and transpilers, but most only do a subset of what Rockstar offers. So I wrote my own Rockstar to C++ transpiler in C++, that generates C++ code that can be compiled with a C++17 compiler to a native executable.

[Read More]

Rockstar

The Art of Code

Rockstar

To understand what this is about you absolutely should watch Dylan Beattie’s brilliant presentation about The Art of Code.

Now you know Rockstar is a computer programming language designed for creating programs that are also hair metal power ballads.

The famous Fizzbuzz program looks like this.

Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart

Give back your heart


Desire is a lovestruck ladykiller
My world is nothing
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top

If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top

If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top

Whisper my world

On the rockstar website you can try it online. There are several implementations of Rockstar interpreters and transpilers, but most only do a subset of what Rockstar offers. So I wrote my own Rockstar to C++ transpiler in C++, that generates C++ code that can be compiled with a C++17 compiler to a native executable.

[Read More]

Wireshark

Dissectors for Wireshark

Wireshark

What is Wireshark? To answer this it is best to quote the description from the Wireshark website.

Wireshark is the world’s foremost and widely-used network protocol analyzer. It lets you see what’s happening on your network at a microscopic level and is the de facto (and often de jure) standard across many commercial and non-profit enterprises, government agencies, and educational institutions. Wireshark development thrives thanks to the volunteer contributions of networking experts around the globe and is the continuation of a project started by Gerald Combs in 1998.

[Read More]

Open DMX USB

Linux Driver for ENTTEC Open DMX USB dongle

Open DMX USB

Open DMX USB is an open USB to DMX dongle hardware design developed by Enttec. The Open in Open DMX USB refers to the fact that everybody is free to use the design and produce its own USB DMX Dongle without paying any licenses. Since this fits the Linux philosophy I wrote a small Linux 4.X kernel driver to make it possible to use the dongle under Linux.

Getting the Driver

The source code of the driver is now hosted as dmx_usb_module on GitHub. You can use the following git command to clone and compile the sources

[Read More]

MPC8xx BDM

MPC8XX BDM Debugging Library

Warning: This project is from the last century (round 1999) and is probably not useful anymore (who still has a PC with a lpt port?), but I keep it here for historic reasons.

The MPC8XX Library is a library to control a Motorola PowerPC processor of type MPC8xx via its BDM debug port. It is based on the GDB patch written by Frank Przybylski of VAS GmbH. The main difference with the GDB patch by Frank Przybylski is that the BDM functionality is put in a shared library and so can also be used by other applications like, for example, a FLASH loader or an automated board test program.

[Read More]
gdb  foss  linux