AHHH this is fantastic! Serendipity, maybe because of this thread-- I've been doing some similar stuff (but not yet as extensive!). I can't wait to check out your projects. I'm doing a short online session for the
Typographics conference next week with some of my own stuff and I'll be delighted to speak to your work as well. I also ported Kare's Chicago (an all time favorite) to punch tape.
Here is my font.h as well if it will help you, though font creation was graph paper and a pencil
int letters[ 95 ][ 5 ] =
{
{ 0, 0, 191, 0, 0 }, // ! g
{ 0, 0, 0, 0, 0 }, // " // this will fail your "not mapped" test
{ 80, 248, 80, 248, 80 }, // # g
{ 0, 0, 0, 0, 0 }, // $
{ 0, 0, 0, 0, 0 }, // %
{ 0, 0, 0, 0, 0 }, // &
{ 0, 0, 14, 0, 0 }, // ' g
{ 0, 56, 68, 130, 0 }, // ( g
{ 0, 130, 68, 56, 0 }, // ) g
{ 0, 0, 0, 0, 0 }, // * 10
{ 0, 16, 56, 16, 0 }, // + g
{ 0, 128, 96, 0, 0 }, // , g
{ 0, 16, 16, 16, 0 }, // - g
{ 0, 192, 192, 0, 0 }, // . g
{ 0, 192, 56, 6, 0 }, // / g
{ 124, 162, 146, 138, 124 }, // 0 GOOD
{ 0, 132, 254, 128, 0 }, // 1 GOOD
{ 132, 194, 162, 146, 140 }, // 2 GOOD
{ 68, 130, 146, 146, 108 }, // 3 GOOD
{ 48, 40, 36, 254, 32 }, // 4 GOOD
{ 78, 146, 146, 146, 98 }, // 5 GOOD
{ 124, 146, 146, 146, 100 }, // 6 GOOD
{ 2, 226, 18, 10, 6 }, // 7 GOOD
{ 108, 146, 146, 146, 108 }, // 8 GOOD
{ 12, 146, 146, 146, 124 }, // 9 GOOD
{ 0, 0, 40, 0, 0 }, // : g
{ 0, 64, 40, 0, 0 }, // ; g
{ 8, 20, 34, 33, 0 }, // <
{ 0, 20, 20, 20, 0 }, // =
{ 0, 33, 34, 20, 8 }, // >
{ 2, 5, 89, 1, 2 }, // ?
{ 0, 0, 0, 0, 0 }, // @
{ 248, 20, 18, 20, 248 }, // A GOOD
{ 254, 146, 146, 146, 108 }, // B GOOD
{ 124, 130, 130, 130, 68 }, // C GOOD
{ 254, 130, 130, 130, 124 }, // D GOOD
{ 254, 146, 146, 146, 130 }, // E GOOD
{ 254, 18, 18, 18, 2 }, // F GOOD
{ 124, 130, 130, 146, 116 }, // G GOOD
{ 254, 16, 16, 16, 254 }, // H GOOD 40
{ 130, 130, 254, 130, 130 }, // I GOOD
{ 66, 130, 130, 126, 2 }, // J GOOD
{ 254, 16, 40, 68, 130 }, // K GOOD
{ 254, 128, 128, 128, 128 }, // L GOOD
{ 254, 12, 24, 12, 254 }, // M GOOD
{ 254, 8, 16, 32, 254 }, // N GOOD
{ 254, 130, 130, 130, 254 }, // O GOOD
{ 254, 18, 18, 18, 12 }, // P GOOD
{ 124, 130, 162, 66, 188 }, // Q GOOD
{ 254, 18, 50, 82, 140 }, // R GOOD 50
{ 140, 146, 146, 146, 98 }, // S GOOD
{ 2, 2, 254, 2, 2 }, // T GOOD
{ 126, 128, 128, 128, 126 }, // U GOOD
{ 14, 56, 224, 56, 14 }, // V GOOD
{ 62, 224, 56, 224, 62 }, // W GOOD
{ 198, 40, 16, 40, 198 }, // X GOOD
{ 6, 8, 240, 8, 6 }, // Y GOOD
{ 194, 162, 146, 138, 134 }, // Z GOOD 59
{ 0, 127, 65, 65, 0 }, // [ 60
{ 0, 0, 0, 0, 0 }, // \
{ 0, 65, 65, 127, 0 }, // ]
{ 0, 0, 0, 0, 0 }, // ^
{ 0, 0, 0, 0, 0 }, // _,
{ 0, 0, 0, 0, 0 }, // `
{ 0, 0, 0, 0, 0 }, // no frickin' clue!!
{ 64, 168, 168, 168, 112 }, // a
{ 252, 144, 144, 144, 96 }, // b GOOD
{ 112, 136, 136, 136, 136 }, // c GOOD
{ 96, 144, 144, 160, 252 }, // d GOOD
{ 112, 168, 168, 168, 48 }, // e GOOD
{ 32, 248, 36, 36, 0 }, // f GOOD
{ 24, 164, 164, 168, 124 }, // g GOOD
{ 252, 32, 16, 16, 224 }, // h GOOD
{ 0, 0, 244, 0, 0 }, // i GOOD
{ 0, 128, 116, 0, 0 }, // j GOOD
{ 252, 32, 80, 136, 0 }, // k GOOD
{ 0, 0, 124, 128, 0 }, // l GOOD
{ 240, 16, 224, 16, 224 }, // m GOOD
{ 248, 16, 8, 8, 240 }, // n GOOD
{ 112, 136, 136, 136, 112 }, // o GOOD 80
{ 252, 36, 36, 24, 0 }, // p GOOD
{ 24, 36, 36, 24, 252 }, // q GOOD
{ 0, 252, 16, 8, 16 }, // r GOOD
{ 144, 168, 168, 72, 0 }, // s GOOD
{ 0, 8, 124, 136, 0 }, // t GOOD
{ 120, 128, 128, 128, 120 }, // u GOOD
{ 56, 64, 128, 64, 56 }, // v GOOD
{ 56, 192, 56, 192, 56 }, // w GOOD
{ 136, 80, 32, 80, 136 }, // x GOOD
{ 140, 80, 32, 16, 12 }, // y GOOD 90
{ 136, 200, 168, 152, 136 }, // z GOOD
{ 0, 0, 0, 0, 0 }, // {
{ 0, 0, 0, 0, 0 }, // |
{ 0, 0, 0, 0, 0 }, // }
{ 0, 0, 0, 0, 0 }, // ~,