Skip to content

Instantly share code, notes, and snippets.

View francisrstokes's full-sized avatar
🎥
Low Byte Productions on YouTube

Francis Stokes francisrstokes

🎥
Low Byte Productions on YouTube
View GitHub Profile
@francisrstokes
francisrstokes / fixcallgrind.py
Created December 13, 2023 08:34
Just a hacky script to fix the output of callgrid captures for Zig binaries
import re
import sys
import subprocess
callgrind_file = sys.argv[1]
executable_file = sys.argv[2]
if len(sys.argv) < 3:
print("Usage: fix-callgrind.py <callgrind file> <executable>")
sys.exit(1)
@francisrstokes
francisrstokes / machine.c
Created July 31, 2023 17:56
Simple State Machine Base
#include "machine.h"
void state_machine_step(state_machine_t* descriptor) {
state_transition_t* transition;
uint32_t current_state = *descriptor->state_index;
for (uint32_t i = 0; i < descriptor->num_transitions; i++) {
transition = &descriptor->transitions[i];
if ((transition->from_state == current_state) && (transition->condition(current_state))) {
descriptor->on_state_change(current_state, transition->to_state);
@francisrstokes
francisrstokes / risc-v-isa-ascii.txt
Created June 19, 2023 18:44
RISC-V Base Instruction Set v2.2 ASCII
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
+------------------------------------------------------------------------------------------------+
| funct7 | rs2 | rs1 | funct3 | rd | opcode | R-type
| imm[11:0] | rs1 | funct3 | rd | opcode | I-type
| imm[11:5] | rs2 | rs1 | funct3 | imm[4:0] | opcode | S-type
| imm[12|10:5] | rs2 | rs1 | funct3 | imm[4:1|11] | opcode | B-type
| imm[31:12] | rd | opcode | U-type
| imm[20|10:1|11|19:12] | rd | opcode | J-type
+------------------------------------------------------------------------------------------------+
@francisrstokes
francisrstokes / pinout.txt
Created May 23, 2023 11:52
Pinout for the Nucleo-F401RE devboard, which can be easily pasted into a code comment for easy, searchable reference
Pinout for Nucleo-F401RE
_________________________________________________
| O |
| User Reset |
| [B] [B] |
| PC10 PC11 PC9 PC8 |
| PC12 PD2 PB8 PC6 |
| VDD E5V PB9 PC5 |
| BOOT0 GND AVDD U5V |
| NC NC GND NC |
uint16_t BitReverse16(uint16_t value) {
value = (value & 0xFF00) >> 8 | (value & 0x00FF) << 8;
value = (value & 0xF0F0) >> 4 | (value & 0x0F0F) << 4;
value = (value & 0xCCCC) >> 2 | (value & 0x3333) << 2;
value = (value & 0xAAAA) >> 1 | (value & 0x5555) << 1;
return value;
}
@francisrstokes
francisrstokes / visbin.py
Created January 18, 2023 20:11
Binary visualizer, inspired by scanlime
#!/usr/bin/env python
import math
import subprocess
from random import choice
from argparse import ArgumentParser
def random_filename():
letters = [chr(ord("a") + x) for x in range(26)]
return "".join([choice(letters) for _ in range(12)])
@francisrstokes
francisrstokes / Makefile
Last active October 13, 2022 18:13
Custom STM32Cube Makefile
NAME := firmware
# Utility commands
RM := rm -rf
DIR_DUP = mkdir -p $(@D)
# Compiler commands
GCC_PREFIX := arm-none-eabi
CC := $(GCC_PREFIX)-gcc
OBJCOPY := $(GCC_PREFIX)-objcopy
@francisrstokes
francisrstokes / block-facebook.sh
Created July 18, 2022 18:47
Script to route a bunch of known facebook domains to your machine, circumventing tracking
#!/bin/bash
# Run this script as root on a linux machine to
# block (at least some) facebook trackers
echo "0.0.0.0 www.facebook.com" >> /etc/hosts
echo "0.0.0.0 facebook.com" >> /etc/hosts
echo "0.0.0.0 login.facebook.com" >> /etc/hosts
echo "0.0.0.0 www.login.facebook.com" >> /etc/hosts
echo "0.0.0.0 fbcdn.net" >> /etc/hosts
{
"title": "Map CapsLock plus i/j/k/l to Arrows",
"rules": [
{
"description": "Map CapsLock plus i/j/k/l to Arrows",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "j",

Keybase proof

I hereby claim:

  • I am francisrstokes on github.
  • I am francisstokes (https://keybase.io/francisstokes) on keybase.
  • I have a public key ASDAQWguSwFKdWeKeEvEeTyzezi0na5Pmhdva4wN2Cwj4wo

To claim this, I am signing this object: