Skip to content

Instantly share code, notes, and snippets.

View shirriff's full-sized avatar

Ken Shirriff shirriff

View GitHub Profile
@shirriff
shirriff / ac2.py
Created December 7, 2017 18:37
Analyze air conditioner checksum by reversing bytes and summing nibbles.
import re
data="""\
10100001 10010011 01100011 => 01110111
10100001 10010011 01100100 => 01110001
10100001 10010011 01100101 => 01110000
10100001 10010011 01100110 => 01110010
10100001 10010011 01100111 => 01110011
10100001 10010011 01101000 => 01111001
10100001 10010011 01101001 => 01111000
@shirriff
shirriff / ac3.py
Created December 7, 2017 18:38
Create checksums for an air conditioner remote control
import re
# Each line is 3 bytes of input and the observed 1-byte checksum
data="""\
10100001 10010011 01100011 => 01110111
10100001 10010011 01100100 => 01110001
10100001 10010011 01100101 => 01110000
10100001 10010011 01100110 => 01110010
10100001 10010011 01100111 => 01110011
10100001 10010011 01101000 => 01111001
@shirriff
shirriff / card.s
Created December 7, 2017 20:04
IBM 1401 assembly code to print a Christmas card
job card.s
ctl 6641
org 087
X1 dcw 000 * Index 1, pointer to text
dc 00
org 333
start sw 1
sbr x1, buf+80
rloop r * Read cards into page buffer
bce rhs, 1, -
@shirriff
shirriff / christmas_card.txt
Created December 7, 2017 20:05
Text file to generate a Christmas card on the IBM 1401
-
- *
- + XX
- + X XXXX
- + XXX XXXXX
- * XXXXXX XXXXXXX
- XX XXXXXXXXXXXXXXXXX
- XXXX XXXXXXXXXXXXXXXXXX
- * XXXXXX XXXXXXXXXXXXXXXXXXX
- XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
@shirriff
shirriff / mathcrack.py
Last active February 17, 2019 17:42
Rapidly crack Xerox Alto disk passwords using a mathematical formula that reverses the password hash
# Crack Xerox Alto disk passwords using math.
import sys
def findPasswd(passvec):
# a and b are the salt values
a = (passvec[1] << 16) + passvec[2]
b = (passvec[3] << 16) + passvec[4]
if a == 0 or b == 0:
print 'No password'
@shirriff
shirriff / nopassword.py
Created January 4, 2018 02:31
Disable password protection on an Alto disk by zeroing out the password flag in sys.boot
# Disable password protection on an Alto disk by zeroing out the password flag in sys.boot
import sys
import subprocess
diskContents = None
# Get word at the word offset in the disk file
def getWord(wordOffset):
return ord(diskContents[2 * wordOffset]) + ord(diskContents[2 * wordOffset + 1]) * 256
@shirriff
shirriff / password.c
Created January 4, 2018 02:33
Use brute force to crack the password on a Xerox Alto disk.
#include <stdint.h>
#include <stdlib.h>
#include <strings.h>
#include <stdio.h>
int64_t count = 0;
// Password vector from sys.boot. Must be big-endian.
// Disk 47
uint16_t passvec[] = {0xffff, 0xcfa7, 0x9f3d, 0x669a, 0xf2bb, 0xf193, 0x6d09, 0x4571, 0xe1d1};
@shirriff
shirriff / PRU code
Last active January 8, 2018 21:33
Fragment of PRU code to output Manchester-encoded data.
for (bit_count = 0; bit_count < 8; bit_count++) {
if (byte & 0x80) {
wait_for_pwm_timer();
__R30 = HIGH << WRITE_PIN;
wait_for_pwm_timer();
__R30 = LOW << WRITE_PIN;
} else {
wait_for_pwm_timer();
__R30 = LOW << WRITE_PIN;
wait_for_pwm_timer();
@shirriff
shirriff / edid.py
Created March 25, 2018 15:58
Parse VGA configuration data (EDID) accessed from I2C device 0x50
# Program to parse VGA data (EDID) accessed from I2C device 0x50
#
# This is a quick demo not a supported program, so don't expect
# correctness from it.
#
# Edid format from:
# https://en.wikipedia.org/wiki/Extended_Display_Identification_Data#EDID_1.4_data_format
#
# Ken Shirriff http://righto.com
@shirriff
shirriff / fpga-font.py
Created April 4, 2018 03:36
Generate FPGA code to implement a character set
# Process font file to generate FPGA code
# Font from https://github.com/dhepper/font8x8/blob/master/font8x8_basic.h
import re
chars = []
for line in open('font8x8_basic.h').readlines():
m = re.search('{([\s0-9A-Fa-fx,]*)}', line)
if m: