Skip to content

Instantly share code, notes, and snippets.

View kbob's full-sized avatar

Bob Miller kbob

  • Eugene, Oregon, USA
View GitHub Profile
@kbob
kbob / dda2.c
Created November 2, 2016 17:00
Anti-aliasing, subpixel-positioned left edge DDA.
#define EXPECT
#include <assert.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
// Ask Hackaday: How do you DIY a Top-Octave Generator?
// https://hackaday.com/2018/05/24/ask-hackaday-diy-top-octave-generator/?utm_source=feedburner
// Target Arduino Mega.
// N.B., Timer 1 has highest interrupt priority, so
// use it for the highest frequency oscillators.
// Note Comp Port/Pin Arduino Pin
// C OC1A PB5 pin 11
// B OC1B PB6 pin 12
// BEGIN kbob
// This is identical to https://vulkan-tutorial.com/Drawing_a_triangle/Swap_chain_recreation
// as of 2018-06-13 except for code between the "BEGIN kbob" and "END kbob" comments.
// The original code is still there but commented out with "//-".
//
// Built with MoltenVK 1.1.73 and GLFW 20180519 for MacOS, the original never recreated
// the swap chain. It continued to draw at the original 800 by 600 resolution and scaled
// the result to fit the resized window.
//
// Also, according to GLFW doc, the glfwGetWindowSize() is not the right function to call.
@kbob
kbob / gist:3134a65680dd3e0e0015ed7ad423824d
Created November 18, 2018 13:49
Trying to instantiate a 2F PLL -- doesn't work.
`default_nettype none
`define W 24
module top (
input CLK,
output LED1,
output LED2,
output LED3,
output LED4,
# 12 MHz clock
set_io -nowarn CLK 35
# RS232
set_io -nowarn RX 6
set_io -nowarn TX 9
# LEDs and Button
set_io -nowarn BTN_N 10
set_io -nowarn LEDR_N 11
@kbob
kbob / main.rs
Created December 16, 2018 13:21
I fail to understand Rust types.
#[macro_use]
extern crate vulkano;
extern crate vulkano_shaders;
extern crate winit;
extern crate vulkano_win;
use vulkano::buffer::{CpuAccessibleBuffer, CpuBufferPool, BufferUsage};
use vulkano::command_buffer::{AutoCommandBufferBuilder, DynamicState};
use vulkano::descriptor::descriptor_set::PersistentDescriptorSet;
use vulkano::device::{Device, DeviceExtensions};
`default_nettype none
module blinky (CLK, LED1);
input wire CLK;
output wire LED1;
parameter WIDTH = 24;
parameter CLK_HZ = 12_000_000;
reg [WIDTH-1:0] counter;
reg [7:0] led1;
@kbob
kbob / voronoi.glsl
Created July 7, 2019 14:43
This fragment shader is just slightly too slow for an LED cube with Raspberry Pi 3 A+.
#!/usr/bin/env shaderbox
#define TAU 6.283185307179586
#define A vec3(0.5, 0.5, 0.5)
#define B vec3(0.5, 0.5, 0.5)
#define C vec3(1.0, 0.7, 0.4)
#define D vec3(0.0, 0.15, 0.20)
vec3 pal(in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d)
@kbob
kbob / opt_decorator.py
Created November 11, 2019 14:35
Python Decorator with Optional Keyword Arguments
"""
Function decorator with optional keyword arguments.
"""
from functools import wraps
def decorate(func=None, kind=''):
if func is None:
# was called pre-decoration. Return anonymous decorator.
return lambda f: decorate(f, kind)
@kbob
kbob / foo.py
Created November 17, 2019 14:14
nMigen sign extension issue
from nmigen import *
from nmigen_boards.icebreaker import ICEBreakerPlatform
from nmigen.cli import main
class Foo(Elaboratable):
def __init__(self):
self.bar = Signal(signed(24))
def elaborate(self, platform):