Skip to content

Instantly share code, notes, and snippets.

View zeldin's full-sized avatar

Marcus Comstedt zeldin

View GitHub Profile
@zeldin
zeldin / gist:8418c17f489c2240c2cb9cb900bcb4c3
Last active August 26, 2018 13:42
DK5Q firmware upload format
FW upload starts with a packet of type 8:
byte 0 : 00
byte 1 : 08 = FW upload start command
byte 2 : 03 = packet sequence number
byte 3 : 01 = upload protocol version? Must be 1
byte 4-5 : 00 00 = total number of bytes (16-bit little endian), 0 means 64K (max size)
byte 6-7 : 7e 04 = total number of data blocks (16-bit little endian)
byte 8-9 : 00 00 = ? (not used)
byte 10: 39 = bytes of flash data per data block (decimal: 57) (not used)
@zeldin
zeldin / hello.s
Created December 4, 2018 18:54
Small ppc32 assembler program that will run on Linux without any 32-bit libs
# compile with: gcc -m32 -static -nostdlib -o hello hello.s
.text
.globl _start
_start:
bl 1f
1:
@zeldin
zeldin / external_link_ppc64.patch
Created March 21, 2019 09:18
golang patch to enable external linking on ppc64
@zeldin
zeldin / softcore_shootout.md
Last active August 29, 2023 18:32
Comparison between AVR and RISC-V softcore in a real application

This is a comparison between an AVR softcore and the picorv32 when used in a real application. The numbers are for the entire application, not for the cores in isolation. Only minimal changes were made to the HDL and firmware code to adapt to the new core (the peripherals were updated to handle a 32-bit bus, and the interrupt handling was adapted to picorv32, otherwise the code is identical) and the same optimization flags (-Os -mrelax) were used with both cores.

The following were the relevant design constraints:

  • Synthetizable on an iCE40 HX8K
  • fCPU = 17 MHz
@zeldin
zeldin / onelevel_riscv.md
Created October 1, 2021 06:00
Unmerging with and without UNINSTALL_IGNORE in one level riscv profile
vanadis ~ # cat /usr/local/portage/app-misc/twoleveltest/twoleveltest-0.ebuild
EAPI=7
SLOT=0
KEYWORDS="riscv"
S="${WORKDIR}"
src_install() {
  echo "hello" > foobar
  insinto /usr/lib64/lp64d
  doins foobar
@zeldin
zeldin / gist:9bfd020b7fa2a92a95bf2e0a15a61dea
Created August 17, 2022 06:06
Boostrapping Gentoo ghc package
1) Build the Docker at https://github.com/gregwebs/ghc-docker-dev.git
for the target arch
2) Inside the Docker, make a manual build from the upstreams ghc
sources, with all the Debian patches applied, with a prefix of
/tmp/ghcfoo
3) Copy /tmp/ghcfoo from the Docker to the target system
4) Set up /etc/portage/env/dev-lang/ghc to add the ghc binary in
/tmp/ghcfoo to the path
5) Build the ebuild with USE=ghcbootstrap
6) Delete the /etc/portage/env file and rebuild the ebuild again, to
#!/bin/sh
version="$@"
if [ -z "$version" ]; then
version="`equery l -F '$fullversion' -p dev-lang/ghc | tail -1`"
fi
PKGDIR="/tmp/`uname -m`/packages"
[ -d "$PKGDIR" ] || mkdir -p "$PKGDIR"
export PKGDIR
CFLAGS="-O2 -pipe"
export CFLAGS
Debian patches needed for riscv64:
latomic-subword.patch
Debian patches needed for ppc (32-bit):
latomic-subword.patch
latomic-64bit.patch
@zeldin
zeldin / bootstrap_haskell_packages_test.txt
Last active December 6, 2022 17:35
The most(?) efficient way of bootstrapping haskell packages with tests enabled
FEATURES=test USE=test emerge -1a dev-haskell/mtl dev-haskell/text dev-haskell/fail dev-haskell/transformers dev-haskell/parsec dev-haskell/transformers-compat dev-haskell/cabal dev-haskell/tagged dev-haskell/splitmix dev-haskell/primitive dev-haskell/colour dev-haskell/nanospec dev-haskell/cabal-doctest dev-haskell/th-abstraction dev-haskell/clock dev-haskell/setenv dev-haskell/stm dev-haskell/random dev-haskell/call-stack dev-haskell/ansi-terminal dev-haskell/quickcheck dev-haskell/hunit dev-haskell/tf-random dev-haskell/quickcheck-io dev-haskell/hspec-expectations
FEATURES=-test USE=-test emerge -1a dev-haskell/hspec-discover dev-haskell/hspec-core # check only these 2 are merged
FEATURES=test USE=test emerge -1a dev-haskell/hspec-discover dev-haskell/hspec-core
FEATURES=test USE=test emerge -a @preserved-rebuild # Should rebuild dev-haskell/hspec
Only three rebuilds are needed; dev-haskell/hspec-discover dev-haskell/hspec-core and dev-haskell/hspec
Build list for first command (25 builds)
// Copyright Oliver Kowalke 2016.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// libcontext adaptation by Marcus Comstedt 2022
#include <cstdlib>
#include <iostream>
#include <memory>