├── 20231105-8088 ├── adlib.cpp ├── cputable.h ├── isa.h ├── makefile ├── vga.h ├── vga86.asm ├── vga86.bin └── vga86.c ├── 20231105-PCBv2 ├── RPI2ISA.kicad_pcb ├── RPI2ISA.kicad_pro └── RPI2ISA.kicad_sch ├── 20231105-rpi2isa ├── isa.h ├── lemmings.dat ├── play.c ├── play_raw.c ├── readc000.c ├── readc_raw.c ├── vga.c └── vga_raw.c ├── ISARPiv2 ├── ISARPiv2-cache.lib ├── ISARPiv2.kicad_pcb ├── ISARPiv2.pro └── ISARPiv2.sch ├── MEMv1 ├── ISAMEM-cache.lib ├── ISAMEM.kicad_pcb ├── ISAMEM.pro └── ISAMEM.sch ├── README.md ├── adlib.c ├── le.adl ├── opl.cpp ├── opl.h ├── play.c ├── read_xtcf.c ├── schematic.png ├── vga_working.c └── vgamem.c /20231105-8088/cputable.h: -------------------------------------------------------------------------------- 1 | unsigned char instructions[] = { 2 | 0x03, 0x03, 0x05, 0x05, 0x06, 0x07, 0x05, 0x03, 3 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 4 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 5 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 6 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 7 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 8 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 9 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 10 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 11 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 12 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 13 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 14 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 15 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 16 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 17 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 18 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 22 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 23 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 24 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 25 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 26 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 27 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 28 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 29 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 30 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 31 | 0x0C, 0x0C, 0x0C, 0x0C, 0x29, 0x2A, 0x2B, 0x2C, 32 | 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 33 | 0x0D, 0x0D, 0x0D, 0x0D, 0x15, 0x15, 0x16, 0x16, 34 | 0x06, 0x07, 0x06, 0x07, 0x0C, 0x0C, 0x0C, 0x0C, 35 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 36 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 37 | 0x03, 0x03, 0x05, 0x05, 0x06, 0x07, 0x05, 0x03, 38 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 39 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 40 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 41 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 42 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 43 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 44 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 45 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 46 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 47 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 48 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 49 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 50 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 51 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 52 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 53 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 54 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 55 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 56 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 57 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 58 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 59 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 60 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 61 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 62 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 63 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 64 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 65 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 66 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 67 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 68 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 69 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 70 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 71 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 72 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 73 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 74 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 75 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 76 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 77 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 78 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 79 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 80 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 81 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 82 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 85 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 86 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 87 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 88 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 89 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 90 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 91 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 92 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 93 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 94 | 0x0C, 0x0C, 0x0C, 0x0C, 0x29, 0x2A, 0x2B, 0x2C, 95 | 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 96 | 0x0D, 0x0D, 0x0D, 0x0D, 0x15, 0x15, 0x16, 0x16, 97 | 0x0E, 0x0E, 0x0E, 0x0E, 0x15, 0x15, 0x16, 0x16, 98 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 99 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 100 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 101 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 102 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 103 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 104 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 105 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 106 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 107 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 108 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 109 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 110 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 111 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 112 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 113 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 116 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 117 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 118 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 119 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 120 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 121 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 122 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 123 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 124 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 125 | 0x0C, 0x0C, 0x0C, 0x0C, 0x29, 0x2A, 0x2B, 0x2C, 126 | 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 127 | 0x0D, 0x0D, 0x0D, 0x0D, 0x15, 0x15, 0x16, 0x16, 128 | 0x0E, 0x0E, 0x0E, 0x0E, 0x15, 0x15, 0x16, 0x16, 129 | 0x35, 0x00, 0x17, 0x17, 0x35, 0x2D, 0x06, 0x06, 130 | 0x03, 0x03, 0x05, 0x05, 0x06, 0x07, 0x0C, 0x03, 131 | 0x06, 0x07, 0x06, 0x07, 0x0C, 0x0C, 0x0C, 0x0C, 132 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 133 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 134 | 0x03, 0x03, 0x05, 0x05, 0x06, 0x07, 0x05, 0x03, 135 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 136 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 137 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 138 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 139 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 140 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 141 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 142 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 143 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 144 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 145 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 146 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 147 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 148 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 149 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 150 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 151 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 152 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 153 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 154 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 155 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 156 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 157 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 158 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 159 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 160 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 161 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 162 | 0x06, 0x07, 0x06, 0x07, 0x0C, 0x0C, 0x0C, 0x0C, 163 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 164 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 165 | 0x03, 0x03, 0x05, 0x05, 0x06, 0x07, 0x05, 0x03, 166 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 167 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 168 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 169 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 170 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 171 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 172 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 173 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 174 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 175 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 176 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 177 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 178 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 179 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 180 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 181 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 182 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 183 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 184 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 185 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 186 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 187 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 188 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 189 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 190 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 191 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 192 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 193 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 194 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 195 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 196 | 0x03, 0x03, 0x05, 0x05, 0x06, 0x07, 0x05, 0x03, 197 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 198 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 199 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 200 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 201 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 202 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 203 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 204 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 205 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 206 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 207 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 208 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 209 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 210 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 211 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 212 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 213 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 214 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 215 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 216 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 217 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 218 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 219 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 220 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 221 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 222 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 223 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 224 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 225 | 0x0C, 0x0C, 0x0C, 0x0C, 0x29, 0x2A, 0x2B, 0x2C, 226 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 227 | 0x03, 0x03, 0x05, 0x05, 0x06, 0x07, 0x05, 0x03, 228 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 229 | 0x0B, 0x0B, 0x0A, 0x0A, 0x0B, 0x0B, 0x0A, 0x0B, 230 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 231 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 232 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 233 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 234 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 235 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 236 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 237 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 238 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 239 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 240 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 241 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 242 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 243 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 244 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 246 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 247 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 248 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 249 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 250 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 251 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 252 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 253 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 254 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 255 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 256 | 0x0C, 0x0C, 0x0C, 0x0C, 0x29, 0x2A, 0x2B, 0x2C, 257 | 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 258 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 259 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x30, 260 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 261 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x19, 0x1A, 262 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 263 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1C, 264 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 265 | 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x1B, 0x1D, 266 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 267 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 268 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 269 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 270 | 0x33, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 271 | 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 272 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 273 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 274 | 0x08, 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x18, 0x18, 275 | 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 276 | 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 277 | 0x1E, 0x1F, 0x20, 0x35, 0x21, 0x22, 0x23, 0x24, 278 | 0x0B, 0x0B, 0x0B, 0x0B, 0x11, 0x11, 0x12, 0x12, 279 | 0x2F, 0x2F, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 280 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 281 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 282 | 0x0C, 0x0C, 0x13, 0x13, 0x25, 0x25, 0x14, 0x14, 283 | 0x31, 0x32, 0x13, 0x13, 0x26, 0x27, 0x28, 0x13, 284 | 0x0C, 0x0C, 0x0C, 0x0C, 0x29, 0x2A, 0x2B, 0x2C, 285 | 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 286 | 0x0D, 0x0D, 0x0D, 0x0D, 0x15, 0x15, 0x16, 0x16, 287 | 0x0E, 0x0E, 0x0E, 0x0E, 0x15, 0x15, 0x16, 0x16, 288 | 0x35, 0x00, 0x17, 0x17, 0x35, 0x2D, 0x06, 0x06, 289 | 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x05, 0x05, 290 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 291 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x24, 292 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0A, 0x0A, 293 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0B, 0x0B, 294 | 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x00, 295 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x09, 0x01, 296 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0A, 0x02, 297 | 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0B, 0x00, 298 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 299 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 300 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 301 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 302 | 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 303 | 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, 304 | 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 305 | 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 306 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 307 | 0x08, 0x08, 0x08, 0x08, 0x0C, 0x0C, 0x0C, 0x0C, 308 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 309 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 310 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 311 | 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 312 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 313 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 314 | 0x01, 0x01, 0x00, 0x00, 0x10, 0x16, 0x00, 0x00, 315 | 0x00, 0x00, 0x01, 0x01, 0x00, 0xFF, 0x30, 0x02, 316 | 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x28, 0x0B, 317 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 318 | 0x2B, 0x2B, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 319 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 320 | 0x01, 0x15, 0x00, 0x00, 0x02, 0x28, 0x15, 0x15, 321 | 0x50, 0x51, 0x5C, 0x5D, 0x5E, 0x5F, 0x00, 0x00, 322 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 323 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 324 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 325 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 326 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x01, 327 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x01, 328 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x01, 329 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x01, 330 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 331 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 332 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 333 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 334 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 335 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 336 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 337 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 338 | 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x00, 0x00, 339 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 340 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 341 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 342 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 343 | 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 344 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 345 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 346 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 347 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 348 | 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 349 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 350 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 351 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 352 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 353 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 354 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 355 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 356 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 357 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 358 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 359 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 360 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 361 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 362 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 363 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 364 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 365 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 366 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 367 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 368 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 369 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 370 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 371 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 372 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 373 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 374 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 375 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 376 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 377 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 378 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 379 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 380 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 381 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 382 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 383 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 384 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 385 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 386 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 387 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 388 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 389 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 390 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 391 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 392 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 393 | 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 394 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 395 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 396 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 397 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 398 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 399 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 400 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 401 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 402 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 403 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 404 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 405 | 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 406 | 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 407 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 408 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 409 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 410 | 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 411 | 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 412 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 413 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 414 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 415 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 416 | 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 417 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 418 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 419 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 420 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 421 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 422 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 423 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 424 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 425 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 426 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 427 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 428 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 429 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 430 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 431 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 432 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 433 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 434 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 435 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 436 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 437 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 438 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 439 | 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 440 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 441 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 442 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 443 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 444 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 445 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 446 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 447 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 448 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 449 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 450 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 451 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 452 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 453 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 454 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 455 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 456 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 457 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 458 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 459 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 460 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 461 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 462 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 463 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 464 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 465 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 466 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 467 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 468 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 469 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 470 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 471 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 472 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 473 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 474 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 475 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 476 | 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 477 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 478 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 479 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 480 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 481 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 482 | 0x30, 0x28, 0x2B, 0x28, 0x2C, 0x29, 0x31, 0x31, 483 | 0x31, 0x31, 0x31, 0x2B, 0x31, 0x31, 0x31, 0x2B, 484 | 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x2C, 0x2C, 485 | 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x30, 0x30, 486 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 487 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 488 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 489 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 490 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 491 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 492 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 493 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 494 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 495 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 496 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 497 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 498 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 499 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 500 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 501 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 502 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 503 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 504 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 505 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 506 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 507 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 508 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 509 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 510 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 511 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 512 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 513 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 514 | 0x31, 0x31, 0x31, 0x2B, 0x31, 0x31, 0x31, 0x2B, 515 | 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x2C, 0x2C, 516 | 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x30, 0x30, 517 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 518 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 519 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 520 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 521 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 522 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 523 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 524 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 525 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 526 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 527 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 528 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 529 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 530 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 531 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 532 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 533 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 534 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 535 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 536 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 537 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 538 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 539 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 540 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 541 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 542 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 543 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 544 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 545 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 546 | 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x2C, 0x2C, 547 | 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x30, 0x30, 548 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 549 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 550 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 551 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 552 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 553 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 554 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 555 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 556 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 557 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 558 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 559 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 560 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 561 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 562 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 563 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 564 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 565 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 566 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 567 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 568 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 569 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 570 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 571 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 572 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 573 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 574 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 575 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 576 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 577 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 578 | 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x30, 0x30, 579 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 580 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 581 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 582 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 583 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 584 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 585 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 586 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 587 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 588 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 589 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 590 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 591 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 592 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 593 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 594 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 595 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 596 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 597 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 598 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 599 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 600 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 601 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 602 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 603 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 604 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 605 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 606 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 607 | 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 608 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 609 | 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 610 | 0x00, 0x02, 0x04, 0x06, 0x07, 0x08, 0x09, 0x0A, 611 | 0x0B, 0x30, 0x28, 0x2B, 0x28, 0x2C, 0x29, 0x31, 612 | 0x31, 0x31, 0x31, 0x31, 0x2B, 0x31, 0x31, 0x31, 613 | 0x2B, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x2C, 614 | 0x2C, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x30, 615 | 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 616 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 617 | 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 618 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 619 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 620 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 621 | 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 622 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 623 | 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 624 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 625 | 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 626 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 627 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 628 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 629 | 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 630 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 631 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 632 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 633 | 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 634 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 635 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 636 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 637 | 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 638 | 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 639 | 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 640 | 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 641 | 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00}; 642 | -------------------------------------------------------------------------------- /20231105-8088/isa.h: -------------------------------------------------------------------------------- 1 | #define GPSET0 7 2 | #define GPCLR0 10 3 | #define GPLEV0 13 4 | #define GPFSEL0 0 // 0- 9 5 | #define GPFSEL1 1 // 10-19 6 | #define GPFSEL2 2 // 20-29 7 | 8 | #define INPUT 0 9 | #define OUTPUT 1 10 | 11 | #define LA 23 12 | #define IOW 25 13 | #define IOR 11 14 | #define MEMR 9 15 | #define MEMW 10 16 | #define RESET 22 17 | #define READY 24 18 | 19 | #define D0 27 20 | #define D1 18 21 | #define D2 17 22 | #define D3 15 23 | #define D4 14 24 | #define D5 4 25 | #define D6 3 26 | #define D7 2 27 | 28 | #define A0 21 29 | #define A1 20 30 | #define A2 26 31 | #define A3 16 32 | #define A4 19 33 | #define A5 13 34 | #define A6 12 35 | #define A7 6 36 | #define A8 5 37 | #define A9 1 38 | #define A10 0 39 | #define A11 7 40 | 41 | volatile int wcnt = 0; 42 | volatile int *gpio; 43 | volatile int gpio_clear = 0; 44 | volatile int gpio_set = 0; 45 | volatile int mode = 0; 46 | volatile int oldaddr = 0; 47 | 48 | void setinput(void) { 49 | gpio[GPFSEL0] = 0x08248009; 50 | gpio[GPFSEL1] = 0x08040249; 51 | gpio[GPFSEL2] = 0x00048249; 52 | mode = 0; 53 | } 54 | 55 | void setoutput(void) { 56 | gpio[GPFSEL0] = 0x08249249; 57 | gpio[GPFSEL1] = 0x09249249; 58 | gpio[GPFSEL2] = 0x00248249; 59 | mode = 1; 60 | } 61 | 62 | void digitalWrite(int pin, int state) { 63 | if(state==0) gpio_clear |= (1<> pin) & 1; 69 | } 70 | 71 | void updatePins(void) { 72 | gpio[GPCLR0] = gpio_clear; 73 | gpio[GPCLR0] = gpio_clear; 74 | gpio[GPSET0] = gpio_set; 75 | gpio[GPSET0] = gpio_set; 76 | gpio_clear = 0; 77 | gpio_set = 0; 78 | } 79 | 80 | /****/ 81 | 82 | void setaddr(unsigned short addr) { 83 | digitalWrite(A0, addr & 1); addr >>= 1; 84 | digitalWrite(A1, addr & 1); addr >>= 1; 85 | digitalWrite(A2, addr & 1); addr >>= 1; 86 | digitalWrite(A3, addr & 1); addr >>= 1; 87 | digitalWrite(A4, addr & 1); addr >>= 1; 88 | digitalWrite(A5, addr & 1); addr >>= 1; 89 | digitalWrite(A6, addr & 1); addr >>= 1; 90 | digitalWrite(A7, addr & 1); addr >>= 1; 91 | digitalWrite(A8, addr & 1); addr >>= 1; 92 | digitalWrite(A9, addr & 1); addr >>= 1; 93 | digitalWrite(A10, addr & 1); addr >>= 1; 94 | digitalWrite(A11, addr & 1); 95 | } 96 | 97 | void setdata(unsigned char data) { 98 | digitalWrite(D0, data & 1); data >>= 1; 99 | digitalWrite(D1, data & 1); data >>= 1; 100 | digitalWrite(D2, data & 1); data >>= 1; 101 | digitalWrite(D3, data & 1); data >>= 1; 102 | digitalWrite(D4, data & 1); data >>= 1; 103 | digitalWrite(D5, data & 1); data >>= 1; 104 | digitalWrite(D6, data & 1); data >>= 1; 105 | digitalWrite(D7, data & 1); 106 | } 107 | 108 | unsigned char getdata() { 109 | unsigned char data; 110 | 111 | data = digitalRead(D7); data <<= 1; 112 | data |= digitalRead(D6); data <<= 1; 113 | data |= digitalRead(D5); data <<= 1; 114 | data |= digitalRead(D4); data <<= 1; 115 | data |= digitalRead(D3); data <<= 1; 116 | data |= digitalRead(D2); data <<= 1; 117 | data |= digitalRead(D1); data <<= 1; 118 | data |= digitalRead(D0); 119 | 120 | return data; 121 | } 122 | 123 | /****/ 124 | 125 | void outb(unsigned short addr, unsigned char data) { 126 | if(mode==0) setoutput(); 127 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF) ) { 128 | setaddr((addr >> 12) & 0xFF); 129 | digitalWrite(LA, 1); updatePins(); 130 | digitalWrite(LA, 0); updatePins(); 131 | oldaddr = addr; 132 | } 133 | setaddr(addr & 0xFFF); updatePins(); 134 | setdata(data); updatePins(); 135 | digitalWrite(IOW, 0); updatePins(); 136 | usleep(1); 137 | digitalWrite(IOW, 1); updatePins(); 138 | } 139 | 140 | unsigned char inb(unsigned short addr) { 141 | unsigned char data; 142 | 143 | if(mode==1) setinput(); 144 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF) ) { 145 | setaddr((addr >> 12) & 0xFF); 146 | digitalWrite(LA, 1); updatePins(); 147 | digitalWrite(LA, 0); updatePins(); 148 | oldaddr = addr; 149 | } 150 | setaddr(addr & 0xFFF); updatePins(); 151 | digitalWrite(IOR, 0); updatePins(); 152 | usleep(1); 153 | data = getdata(); 154 | digitalWrite(IOR, 1); updatePins(); 155 | 156 | return data; 157 | } 158 | 159 | static void memw(unsigned int addr, unsigned char data) { 160 | if(mode==0) setoutput(); 161 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF) ) { 162 | setaddr((addr >> 12) & 0xFF); 163 | digitalWrite(LA, 1); updatePins(); 164 | digitalWrite(LA, 0); updatePins(); 165 | oldaddr = addr; 166 | } 167 | setaddr(addr & 0xFFF); updatePins(); 168 | setdata(data); updatePins(); 169 | digitalWrite(MEMW, 0); updatePins(); 170 | while(!digitalRead(READY)); 171 | digitalWrite(MEMW, 1); updatePins(); 172 | } 173 | 174 | unsigned char memr(unsigned int addr) { 175 | unsigned char data; 176 | 177 | if(mode==1) setinput(); 178 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF)) { 179 | setaddr((addr >> 12) & 0xFF); 180 | digitalWrite(LA, 1); updatePins(); 181 | digitalWrite(LA, 0); updatePins(); 182 | oldaddr = addr; 183 | } 184 | setaddr(addr & 0xFFF); updatePins(); 185 | digitalWrite(MEMR, 0); updatePins(); 186 | while(!digitalRead(READY)); 187 | data = getdata(); 188 | digitalWrite(MEMR, 1); updatePins(); 189 | 190 | return data; 191 | } 192 | -------------------------------------------------------------------------------- /20231105-8088/makefile: -------------------------------------------------------------------------------- 1 | all: 2 | nasm -O0 -fbin vga86.asm -o vga86.bin 3 | # cc vga86.c -o vga86 -fsigned-char -lSDL2 -framework OpenGL 4 | # cc vga86.c -o vga86 -fsigned-char -lm -lSDL2 -lGL 5 | gcc -O0 vga86.c -o vga86 -fsigned-char -lm -lSDL2 6 | # gcc -O2 vga86.c -o vga86 -fsigned-char -lm 7 | -------------------------------------------------------------------------------- /20231105-8088/vga.h: -------------------------------------------------------------------------------- 1 | void init_vga(void) { 2 | // ET4000: set key 3 | outb(0x3bf, 3); 4 | outb(0x3d8, 0xa0); 5 | usleep(100000); 6 | 7 | // ET4000: set clocks 8 | outb(0x3c4, 0x07); 9 | outb(0x3c5, 0xfc); 10 | usleep(100000); 11 | 12 | // MISC register at port 3c2 13 | outb(0x3c2, 0x63); 14 | 15 | // ATC registers at port 3c0 16 | for(int i=0; i<0x10; i++) { 17 | inb(0x3da); 18 | outb(0x3c0, i); 19 | outb(0x3c0, i); 20 | } 21 | outb(0x3c0, 0x30); outb(0x3c0, 0x41); 22 | outb(0x3c0, 0x31); outb(0x3c0, 0x00); 23 | outb(0x3c0, 0x32); outb(0x3c0, 0x0f); 24 | outb(0x3c0, 0x33); outb(0x3c0, 0x00); 25 | outb(0x3c0, 0x34); outb(0x3c0, 0x00); 26 | 27 | // SEQ registers at port 3c4 28 | outb(0x3c4, 0x00); outb(0x3c5, 0x03); 29 | outb(0x3c4, 0x01); outb(0x3c5, 0x01); 30 | outb(0x3c4, 0x02); outb(0x3c5, 0x0f); 31 | outb(0x3c4, 0x03); outb(0x3c5, 0x00); 32 | outb(0x3c4, 0x04); outb(0x3c5, 0x0e); 33 | 34 | // GDC registers at port 3ce 35 | outb(0x3ce, 0x00); outb(0x3cf, 0x00); 36 | outb(0x3ce, 0x01); outb(0x3cf, 0x00); 37 | outb(0x3ce, 0x02); outb(0x3cf, 0x00); 38 | outb(0x3ce, 0x03); outb(0x3cf, 0x00); 39 | outb(0x3ce, 0x04); outb(0x3cf, 0x00); 40 | outb(0x3ce, 0x05); outb(0x3cf, 0x40); 41 | outb(0x3ce, 0x06); outb(0x3cf, 0x05); 42 | outb(0x3ce, 0x07); outb(0x3cf, 0x0f); 43 | outb(0x3ce, 0x08); outb(0x3cf, 0xff); 44 | 45 | // CRTC registers at port 3d4 46 | outb(0x3d4, 0x11); outb(0x3d5, 0x00); 47 | outb(0x3d4, 0x00); outb(0x3d5, 0x5f); 48 | outb(0x3d4, 0x01); outb(0x3d5, 0x4f); 49 | outb(0x3d4, 0x02); outb(0x3d5, 0x50); 50 | outb(0x3d4, 0x03); outb(0x3d5, 0x82); 51 | outb(0x3d4, 0x04); outb(0x3d5, 0x54); 52 | outb(0x3d4, 0x05); outb(0x3d5, 0x80); 53 | outb(0x3d4, 0x06); outb(0x3d5, 0xbf); 54 | outb(0x3d4, 0x07); outb(0x3d5, 0x1f); 55 | outb(0x3d4, 0x08); outb(0x3d5, 0x00); 56 | outb(0x3d4, 0x09); outb(0x3d5, 0x41); 57 | outb(0x3d4, 0x0a); outb(0x3d5, 0x00); 58 | outb(0x3d4, 0x0b); outb(0x3d5, 0x00); 59 | outb(0x3d4, 0x0c); outb(0x3d5, 0x00); 60 | outb(0x3d4, 0x0d); outb(0x3d5, 0x00); 61 | outb(0x3d4, 0x0e); outb(0x3d5, 0x00); 62 | outb(0x3d4, 0x0f); outb(0x3d5, 0x00); 63 | outb(0x3d4, 0x10); outb(0x3d5, 0x9c); 64 | outb(0x3d4, 0x11); outb(0x3d5, 0x8e); 65 | outb(0x3d4, 0x12); outb(0x3d5, 0x8f); 66 | outb(0x3d4, 0x13); outb(0x3d5, 0x28); 67 | outb(0x3d4, 0x14); outb(0x3d5, 0x40); 68 | outb(0x3d4, 0x15); outb(0x3d5, 0x96); 69 | outb(0x3d4, 0x16); outb(0x3d5, 0xb9); 70 | outb(0x3d4, 0x17); outb(0x3d5, 0xa3); 71 | outb(0x3d4, 0x18); outb(0x3d5, 0xff); 72 | 73 | /* Enable video */ 74 | outb(0x3c0, 0x20); 75 | inb(0x3da); 76 | 77 | /* Set palette */ 78 | outb(0x3c6, 0xff); // PEL mask 79 | outb(0x3c8, 0); // Palette register 80 | for(int i=0; i<64; i++) { 81 | outb(0x3c9, i & 63); 82 | outb(0x3c9, 0); 83 | outb(0x3c9, 0); 84 | } 85 | for(int i=0; i<64; i++) { 86 | outb(0x3c9, 0); 87 | outb(0x3c9, i & 63); 88 | outb(0x3c9, 0); 89 | } 90 | for(int i=0; i<64; i++) { 91 | outb(0x3c9, 0); 92 | outb(0x3c9, 0); 93 | outb(0x3c9, i & 63); 94 | } 95 | for(int i=0; i<64; i++) { 96 | outb(0x3c9, i & 63); 97 | outb(0x3c9, i & 63); 98 | outb(0x3c9, i & 63); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /20231105-8088/vga86.asm: -------------------------------------------------------------------------------- 1 | cpu 8086 2 | org 0xf000 3 | 4 | ;;;; BLANK INTERRUPT ;;;; 5 | 6 | iret 7 | 8 | ;;;; STACK ;;;; 9 | 10 | mov sp, 0x30 11 | mov ss, sp 12 | mov sp, 0xfe 13 | 14 | ;;;; MODIFY INTERRUPT VECTOR TABLE ;;;; 15 | 16 | mov word [es:0x08*4], INT08 ; TIMER HW 17 | mov word [es:0x09*4], INT09 ; KEYBOARD HW 18 | ; mov word [es:0x16*4], INT16 ; KEYBOARD SW 19 | mov word [es:0x1a*4], INT1A ; TIMER SW 20 | 21 | ;;;; BOOT ;;;; 22 | 23 | ; call 0xc000:3 24 | 25 | jmp 0:0x7c00 26 | 27 | ;;;; TIMER HW ;;;; 28 | 29 | INT08: 30 | push ds 31 | push ax 32 | mov ax, 0x40 33 | mov ds, ax 34 | clc 35 | adc word [ds:0x6c], 1 36 | adc word [ds:0x6e], 0 37 | int 0x1c 38 | pop ax 39 | pop ds 40 | iret 41 | 42 | ;;;; KEYBOARD HW ;;;; 43 | 44 | INT09: 45 | in al, 0x60 46 | db 0x0f, 0x09 47 | iret 48 | 49 | ;;;; KEYBOARD SW ;;;; 50 | 51 | INT16: 52 | xor ax, ax 53 | iret 54 | 55 | ;;;; TIMER SW ;;;; 56 | 57 | INT1A: 58 | push ax 59 | push ds 60 | mov ax, 0x40 61 | mov ds, ax 62 | mov cx, [ds:0x6e] 63 | mov dx, [ds:0x6c] 64 | pop ds 65 | pop ax 66 | iret 67 | 68 | ;;;; END ;;;; 69 | 70 | times 4096-($-$$) db 0 71 | -------------------------------------------------------------------------------- /20231105-8088/vga86.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eigenco/RPiISA/1f57fa4a2ca5f0cd25a7843db3d658d8adc595e6/20231105-8088/vga86.bin -------------------------------------------------------------------------------- /20231105-PCBv2/RPI2ISA.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "board_outline_line_width": 0.049999999999999996, 7 | "copper_line_width": 0.19999999999999998, 8 | "copper_text_italic": false, 9 | "copper_text_size_h": 1.5, 10 | "copper_text_size_v": 1.5, 11 | "copper_text_thickness": 0.3, 12 | "copper_text_upright": false, 13 | "courtyard_line_width": 0.049999999999999996, 14 | "dimension_precision": 4, 15 | "dimension_units": 3, 16 | "dimensions": { 17 | "arrow_length": 1270000, 18 | "extension_offset": 500000, 19 | "keep_text_aligned": true, 20 | "suppress_zeroes": false, 21 | "text_position": 0, 22 | "units_format": 1 23 | }, 24 | "fab_line_width": 0.09999999999999999, 25 | "fab_text_italic": false, 26 | "fab_text_size_h": 1.0, 27 | "fab_text_size_v": 1.0, 28 | "fab_text_thickness": 0.15, 29 | "fab_text_upright": false, 30 | "other_line_width": 0.09999999999999999, 31 | "other_text_italic": false, 32 | "other_text_size_h": 1.0, 33 | "other_text_size_v": 1.0, 34 | "other_text_thickness": 0.15, 35 | "other_text_upright": false, 36 | "pads": { 37 | "drill": 0.762, 38 | "height": 1.524, 39 | "width": 1.524 40 | }, 41 | "silk_line_width": 0.12, 42 | "silk_text_italic": false, 43 | "silk_text_size_h": 1.0, 44 | "silk_text_size_v": 1.0, 45 | "silk_text_thickness": 0.15, 46 | "silk_text_upright": false, 47 | "zones": { 48 | "45_degree_only": false, 49 | "min_clearance": 0.508 50 | } 51 | }, 52 | "diff_pair_dimensions": [], 53 | "drc_exclusions": [], 54 | "meta": { 55 | "filename": "board_design_settings.json", 56 | "version": 2 57 | }, 58 | "rule_severities": { 59 | "annular_width": "error", 60 | "clearance": "error", 61 | "connection_width": "warning", 62 | "copper_edge_clearance": "error", 63 | "copper_sliver": "warning", 64 | "courtyards_overlap": "error", 65 | "diff_pair_gap_out_of_range": "error", 66 | "diff_pair_uncoupled_length_too_long": "error", 67 | "drill_out_of_range": "error", 68 | "duplicate_footprints": "warning", 69 | "extra_footprint": "warning", 70 | "footprint": "error", 71 | "footprint_type_mismatch": "error", 72 | "hole_clearance": "error", 73 | "hole_near_hole": "error", 74 | "invalid_outline": "error", 75 | "isolated_copper": "warning", 76 | "item_on_disabled_layer": "error", 77 | "items_not_allowed": "error", 78 | "length_out_of_range": "error", 79 | "lib_footprint_issues": "warning", 80 | "lib_footprint_mismatch": "warning", 81 | "malformed_courtyard": "error", 82 | "microvia_drill_out_of_range": "error", 83 | "missing_courtyard": "ignore", 84 | "missing_footprint": "warning", 85 | "net_conflict": "warning", 86 | "npth_inside_courtyard": "ignore", 87 | "padstack": "error", 88 | "pth_inside_courtyard": "ignore", 89 | "shorting_items": "error", 90 | "silk_edge_clearance": "warning", 91 | "silk_over_copper": "warning", 92 | "silk_overlap": "warning", 93 | "skew_out_of_range": "error", 94 | "solder_mask_bridge": "error", 95 | "starved_thermal": "error", 96 | "text_height": "warning", 97 | "text_thickness": "warning", 98 | "through_hole_pad_without_hole": "error", 99 | "too_many_vias": "error", 100 | "track_dangling": "warning", 101 | "track_width": "error", 102 | "tracks_crossing": "error", 103 | "unconnected_items": "error", 104 | "unresolved_variable": "error", 105 | "via_dangling": "warning", 106 | "zones_intersect": "error" 107 | }, 108 | "rule_severitieslegacy_courtyards_overlap": true, 109 | "rule_severitieslegacy_no_courtyard_defined": false, 110 | "rules": { 111 | "allow_blind_buried_vias": false, 112 | "allow_microvias": false, 113 | "max_error": 0.005, 114 | "min_clearance": 0.0, 115 | "min_connection": 0.0, 116 | "min_copper_edge_clearance": 0.024999999999999998, 117 | "min_hole_clearance": 0.25, 118 | "min_hole_to_hole": 0.25, 119 | "min_microvia_diameter": 0.19999999999999998, 120 | "min_microvia_drill": 0.09999999999999999, 121 | "min_resolved_spokes": 2, 122 | "min_silk_clearance": 0.0, 123 | "min_text_height": 0.7999999999999999, 124 | "min_text_thickness": 0.08, 125 | "min_through_hole_diameter": 0.3, 126 | "min_track_width": 0.19999999999999998, 127 | "min_via_annular_width": 0.049999999999999996, 128 | "min_via_diameter": 0.39999999999999997, 129 | "solder_mask_to_copper_clearance": 0.0, 130 | "use_height_for_length_calcs": true 131 | }, 132 | "teardrop_options": [ 133 | { 134 | "td_allow_use_two_tracks": true, 135 | "td_curve_segcount": 5, 136 | "td_on_pad_in_zone": false, 137 | "td_onpadsmd": true, 138 | "td_onroundshapesonly": false, 139 | "td_ontrackend": false, 140 | "td_onviapad": true 141 | } 142 | ], 143 | "teardrop_parameters": [ 144 | { 145 | "td_curve_segcount": 0, 146 | "td_height_ratio": 1.0, 147 | "td_length_ratio": 0.5, 148 | "td_maxheight": 2.0, 149 | "td_maxlen": 1.0, 150 | "td_target_name": "td_round_shape", 151 | "td_width_to_size_filter_ratio": 0.9 152 | }, 153 | { 154 | "td_curve_segcount": 0, 155 | "td_height_ratio": 1.0, 156 | "td_length_ratio": 0.5, 157 | "td_maxheight": 2.0, 158 | "td_maxlen": 1.0, 159 | "td_target_name": "td_rect_shape", 160 | "td_width_to_size_filter_ratio": 0.9 161 | }, 162 | { 163 | "td_curve_segcount": 0, 164 | "td_height_ratio": 1.0, 165 | "td_length_ratio": 0.5, 166 | "td_maxheight": 2.0, 167 | "td_maxlen": 1.0, 168 | "td_target_name": "td_track_end", 169 | "td_width_to_size_filter_ratio": 0.9 170 | } 171 | ], 172 | "track_widths": [ 173 | 0.0, 174 | 0.3, 175 | 0.4, 176 | 0.5, 177 | 1.0 178 | ], 179 | "via_dimensions": [], 180 | "zones_allow_external_fillets": false, 181 | "zones_use_no_outline": true 182 | }, 183 | "layer_presets": [], 184 | "viewports": [] 185 | }, 186 | "boards": [], 187 | "cvpcb": { 188 | "equivalence_files": [] 189 | }, 190 | "erc": { 191 | "erc_exclusions": [], 192 | "meta": { 193 | "version": 0 194 | }, 195 | "pin_map": [ 196 | [ 197 | 0, 198 | 0, 199 | 0, 200 | 0, 201 | 0, 202 | 0, 203 | 1, 204 | 0, 205 | 0, 206 | 0, 207 | 0, 208 | 2 209 | ], 210 | [ 211 | 0, 212 | 2, 213 | 0, 214 | 1, 215 | 0, 216 | 0, 217 | 1, 218 | 0, 219 | 2, 220 | 2, 221 | 2, 222 | 2 223 | ], 224 | [ 225 | 0, 226 | 0, 227 | 0, 228 | 0, 229 | 0, 230 | 0, 231 | 1, 232 | 0, 233 | 1, 234 | 0, 235 | 1, 236 | 2 237 | ], 238 | [ 239 | 0, 240 | 1, 241 | 0, 242 | 0, 243 | 0, 244 | 0, 245 | 1, 246 | 1, 247 | 2, 248 | 1, 249 | 1, 250 | 2 251 | ], 252 | [ 253 | 0, 254 | 0, 255 | 0, 256 | 0, 257 | 0, 258 | 0, 259 | 1, 260 | 0, 261 | 0, 262 | 0, 263 | 0, 264 | 2 265 | ], 266 | [ 267 | 0, 268 | 0, 269 | 0, 270 | 0, 271 | 0, 272 | 0, 273 | 0, 274 | 0, 275 | 0, 276 | 0, 277 | 0, 278 | 2 279 | ], 280 | [ 281 | 1, 282 | 1, 283 | 1, 284 | 1, 285 | 1, 286 | 0, 287 | 1, 288 | 1, 289 | 1, 290 | 1, 291 | 1, 292 | 2 293 | ], 294 | [ 295 | 0, 296 | 0, 297 | 0, 298 | 1, 299 | 0, 300 | 0, 301 | 1, 302 | 0, 303 | 0, 304 | 0, 305 | 0, 306 | 2 307 | ], 308 | [ 309 | 0, 310 | 2, 311 | 1, 312 | 2, 313 | 0, 314 | 0, 315 | 1, 316 | 0, 317 | 2, 318 | 2, 319 | 2, 320 | 2 321 | ], 322 | [ 323 | 0, 324 | 2, 325 | 0, 326 | 1, 327 | 0, 328 | 0, 329 | 1, 330 | 0, 331 | 2, 332 | 0, 333 | 0, 334 | 2 335 | ], 336 | [ 337 | 0, 338 | 2, 339 | 1, 340 | 1, 341 | 0, 342 | 0, 343 | 1, 344 | 0, 345 | 2, 346 | 0, 347 | 0, 348 | 2 349 | ], 350 | [ 351 | 2, 352 | 2, 353 | 2, 354 | 2, 355 | 2, 356 | 2, 357 | 2, 358 | 2, 359 | 2, 360 | 2, 361 | 2, 362 | 2 363 | ] 364 | ], 365 | "rule_severities": { 366 | "bus_definition_conflict": "error", 367 | "bus_entry_needed": "error", 368 | "bus_label_syntax": "error", 369 | "bus_to_bus_conflict": "error", 370 | "bus_to_net_conflict": "error", 371 | "different_unit_footprint": "error", 372 | "different_unit_net": "error", 373 | "duplicate_reference": "error", 374 | "duplicate_sheet_names": "error", 375 | "extra_units": "error", 376 | "global_label_dangling": "warning", 377 | "hier_label_mismatch": "error", 378 | "label_dangling": "error", 379 | "lib_symbol_issues": "warning", 380 | "multiple_net_names": "warning", 381 | "net_not_bus_member": "warning", 382 | "no_connect_connected": "warning", 383 | "no_connect_dangling": "warning", 384 | "pin_not_connected": "error", 385 | "pin_not_driven": "error", 386 | "pin_to_pin": "warning", 387 | "power_pin_not_driven": "error", 388 | "similar_labels": "warning", 389 | "unannotated": "error", 390 | "unit_value_mismatch": "error", 391 | "unresolved_variable": "error", 392 | "wire_dangling": "error" 393 | } 394 | }, 395 | "libraries": { 396 | "pinned_footprint_libs": [], 397 | "pinned_symbol_libs": [] 398 | }, 399 | "meta": { 400 | "filename": "RPI2ISA.kicad_pro", 401 | "version": 1 402 | }, 403 | "net_settings": { 404 | "classes": [ 405 | { 406 | "bus_width": 12, 407 | "clearance": 0.2, 408 | "diff_pair_gap": 0.25, 409 | "diff_pair_via_gap": 0.25, 410 | "diff_pair_width": 0.2, 411 | "line_style": 0, 412 | "microvia_diameter": 0.3, 413 | "microvia_drill": 0.1, 414 | "name": "Default", 415 | "pcb_color": "rgba(0, 0, 0, 0.000)", 416 | "schematic_color": "rgba(0, 0, 0, 0.000)", 417 | "track_width": 0.25, 418 | "via_diameter": 0.8, 419 | "via_drill": 0.4, 420 | "wire_width": 6 421 | } 422 | ], 423 | "meta": { 424 | "version": 3 425 | }, 426 | "net_colors": null, 427 | "netclass_assignments": null, 428 | "netclass_patterns": [] 429 | }, 430 | "pcbnew": { 431 | "last_paths": { 432 | "gencad": "", 433 | "idf": "", 434 | "netlist": "", 435 | "specctra_dsn": "", 436 | "step": "", 437 | "vrml": "" 438 | }, 439 | "page_layout_descr_file": "" 440 | }, 441 | "schematic": { 442 | "annotate_start_num": 0, 443 | "drawing": { 444 | "default_line_thickness": 6.0, 445 | "default_text_size": 25.0, 446 | "field_names": [], 447 | "intersheets_ref_own_page": false, 448 | "intersheets_ref_prefix": "", 449 | "intersheets_ref_short": false, 450 | "intersheets_ref_show": false, 451 | "intersheets_ref_suffix": "", 452 | "junction_size_choice": 3, 453 | "label_size_ratio": 0.25, 454 | "pin_symbol_size": 0.0, 455 | "text_offset_ratio": 0.08 456 | }, 457 | "legacy_lib_dir": "", 458 | "legacy_lib_list": [], 459 | "meta": { 460 | "version": 1 461 | }, 462 | "net_format_name": "", 463 | "ngspice": { 464 | "fix_include_paths": true, 465 | "fix_passive_vals": false, 466 | "meta": { 467 | "version": 0 468 | }, 469 | "model_mode": 0, 470 | "workbook_filename": "" 471 | }, 472 | "page_layout_descr_file": "", 473 | "plot_directory": "", 474 | "spice_adjust_passive_values": false, 475 | "spice_external_command": "spice \"%I\"", 476 | "subpart_first_id": 65, 477 | "subpart_id_separator": 0 478 | }, 479 | "sheets": [ 480 | [ 481 | "e63e39d7-6ac0-4ffd-8aa3-1841a4541b55", 482 | "" 483 | ] 484 | ], 485 | "text_variables": {} 486 | } 487 | -------------------------------------------------------------------------------- /20231105-rpi2isa/isa.h: -------------------------------------------------------------------------------- 1 | #define GPSET0 7 2 | #define GPCLR0 10 3 | #define GPLEV0 13 4 | #define GPFSEL0 0 // 0- 9 5 | #define GPFSEL1 1 // 10-19 6 | #define GPFSEL2 2 // 20-29 7 | 8 | #define INPUT 0 9 | #define OUTPUT 1 10 | 11 | #define LA 23 12 | #define IOW 25 13 | #define IOR 11 14 | #define MEMR 9 15 | #define MEMW 10 16 | #define RESET 22 17 | #define READY 24 18 | 19 | #define D0 27 20 | #define D1 18 21 | #define D2 17 22 | #define D3 15 23 | #define D4 14 24 | #define D5 4 25 | #define D6 3 26 | #define D7 2 27 | 28 | #define A0 21 29 | #define A1 20 30 | #define A2 26 31 | #define A3 16 32 | #define A4 19 33 | #define A5 13 34 | #define A6 12 35 | #define A7 6 36 | #define A8 5 37 | #define A9 1 38 | #define A10 0 39 | #define A11 7 40 | 41 | volatile int wcnt = 0; 42 | volatile int *gpio; 43 | volatile int gpio_clear = 0; 44 | volatile int gpio_set = 0; 45 | volatile int mode = 0; 46 | volatile int oldaddr = 0; 47 | 48 | void setinput(void) { 49 | gpio[GPFSEL0] = 0x08248009; 50 | gpio[GPFSEL1] = 0x08040249; 51 | gpio[GPFSEL2] = 0x00048249; 52 | mode = 0; 53 | } 54 | 55 | void setoutput(void) { 56 | gpio[GPFSEL0] = 0x08249249; 57 | gpio[GPFSEL1] = 0x09249249; 58 | gpio[GPFSEL2] = 0x00248249; 59 | mode = 1; 60 | } 61 | 62 | void digitalWrite(int pin, int state) { 63 | if(state==0) gpio_clear |= (1<> pin) & 1; 69 | } 70 | 71 | void updatePins(void) { 72 | gpio[GPCLR0] = gpio_clear; 73 | gpio[GPCLR0] = gpio_clear; 74 | gpio[GPSET0] = gpio_set; 75 | gpio[GPSET0] = gpio_set; 76 | gpio_clear = 0; 77 | gpio_set = 0; 78 | } 79 | 80 | /****/ 81 | 82 | void setaddr(unsigned short addr) { 83 | digitalWrite(A0, addr & 1); addr >>= 1; 84 | digitalWrite(A1, addr & 1); addr >>= 1; 85 | digitalWrite(A2, addr & 1); addr >>= 1; 86 | digitalWrite(A3, addr & 1); addr >>= 1; 87 | digitalWrite(A4, addr & 1); addr >>= 1; 88 | digitalWrite(A5, addr & 1); addr >>= 1; 89 | digitalWrite(A6, addr & 1); addr >>= 1; 90 | digitalWrite(A7, addr & 1); addr >>= 1; 91 | digitalWrite(A8, addr & 1); addr >>= 1; 92 | digitalWrite(A9, addr & 1); addr >>= 1; 93 | digitalWrite(A10, addr & 1); addr >>= 1; 94 | digitalWrite(A11, addr & 1); 95 | } 96 | 97 | void setdata(unsigned char data) { 98 | digitalWrite(D0, data & 1); data >>= 1; 99 | digitalWrite(D1, data & 1); data >>= 1; 100 | digitalWrite(D2, data & 1); data >>= 1; 101 | digitalWrite(D3, data & 1); data >>= 1; 102 | digitalWrite(D4, data & 1); data >>= 1; 103 | digitalWrite(D5, data & 1); data >>= 1; 104 | digitalWrite(D6, data & 1); data >>= 1; 105 | digitalWrite(D7, data & 1); 106 | } 107 | 108 | unsigned char getdata() { 109 | unsigned char data; 110 | 111 | data = digitalRead(D7); data <<= 1; 112 | data |= digitalRead(D6); data <<= 1; 113 | data |= digitalRead(D5); data <<= 1; 114 | data |= digitalRead(D4); data <<= 1; 115 | data |= digitalRead(D3); data <<= 1; 116 | data |= digitalRead(D2); data <<= 1; 117 | data |= digitalRead(D1); data <<= 1; 118 | data |= digitalRead(D0); 119 | 120 | return data; 121 | } 122 | 123 | /****/ 124 | 125 | void outb(unsigned short addr, unsigned char data) { 126 | //if(mode==0) 127 | setoutput(); 128 | setaddr(addr); 129 | setdata(data); updatePins(); 130 | digitalWrite(IOW, 0); updatePins(); 131 | usleep(1); 132 | digitalWrite(IOW, 1); updatePins(); 133 | usleep(1); 134 | } 135 | 136 | unsigned char inb(unsigned short addr) { 137 | unsigned char data; 138 | 139 | //if(mode==1) 140 | setinput(); 141 | setaddr(addr); updatePins(); 142 | digitalWrite(IOR, 0); updatePins(); 143 | usleep(1); 144 | data = getdata(); 145 | digitalWrite(IOR, 1); updatePins(); 146 | 147 | return data; 148 | } 149 | 150 | void memw(unsigned int addr, unsigned char data) { 151 | //if(mode==0) 152 | setoutput(); 153 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF) ) { 154 | setaddr((addr >> 12) & 0xFF); 155 | digitalWrite(LA, 1); updatePins(); 156 | digitalWrite(LA, 0); updatePins(); 157 | oldaddr = addr; 158 | } 159 | setaddr(addr & 0xFFF); updatePins(); 160 | setdata(data); updatePins(); 161 | digitalWrite(MEMW, 0); updatePins(); 162 | while(!digitalRead(READY)); 163 | digitalWrite(MEMW, 1); updatePins(); 164 | } 165 | 166 | unsigned char memr(unsigned int addr) { 167 | unsigned char data; 168 | 169 | //if(mode==1) 170 | setinput(); 171 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF)) { 172 | setaddr((addr >> 12) & 0xFF); 173 | digitalWrite(LA, 1); updatePins(); 174 | digitalWrite(LA, 0); updatePins(); 175 | oldaddr = addr; 176 | } 177 | setaddr(addr & 0xFFF); updatePins(); 178 | digitalWrite(MEMR, 0); updatePins(); 179 | while(!digitalRead(READY)); 180 | data = getdata(); 181 | digitalWrite(MEMR, 1); updatePins(); 182 | 183 | return data; 184 | } 185 | -------------------------------------------------------------------------------- /20231105-rpi2isa/lemmings.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eigenco/RPiISA/1f57fa4a2ca5f0cd25a7843db3d658d8adc595e6/20231105-rpi2isa/lemmings.dat -------------------------------------------------------------------------------- /20231105-rpi2isa/play.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #define LA 23 7 | #define IOW 25 8 | #define IOR 11 9 | #define MEMR 9 10 | #define MEMW 10 11 | #define RESET 22 12 | 13 | #define D0 27 14 | #define D1 18 15 | #define D2 17 16 | #define D3 15 17 | #define D4 14 18 | #define D5 4 19 | #define D6 3 20 | #define D7 2 21 | 22 | #define A0 21 23 | #define A1 20 24 | #define A2 26 25 | #define A3 16 26 | #define A4 19 27 | #define A5 13 28 | #define A6 12 29 | #define A7 6 30 | #define A8 5 31 | #define A9 1 32 | #define A10 0 33 | #define A11 7 34 | 35 | void setaddr(unsigned short addr) { 36 | digitalWrite(A0, addr & 1); addr >>= 1; 37 | digitalWrite(A1, addr & 1); addr >>= 1; 38 | digitalWrite(A2, addr & 1); addr >>= 1; 39 | digitalWrite(A3, addr & 1); addr >>= 1; 40 | digitalWrite(A4, addr & 1); addr >>= 1; 41 | digitalWrite(A5, addr & 1); addr >>= 1; 42 | digitalWrite(A6, addr & 1); addr >>= 1; 43 | digitalWrite(A7, addr & 1); addr >>= 1; 44 | digitalWrite(A8, addr & 1); addr >>= 1; 45 | digitalWrite(A9, addr & 1); addr >>= 1; 46 | digitalWrite(A10, addr & 1); addr >>= 1; 47 | digitalWrite(A11, addr & 1); 48 | } 49 | 50 | void setdata(unsigned char data) { 51 | digitalWrite(D0, data & 1); data >>= 1; 52 | digitalWrite(D1, data & 1); data >>= 1; 53 | digitalWrite(D2, data & 1); data >>= 1; 54 | digitalWrite(D3, data & 1); data >>= 1; 55 | digitalWrite(D4, data & 1); data >>= 1; 56 | digitalWrite(D5, data & 1); data >>= 1; 57 | digitalWrite(D6, data & 1); data >>= 1; 58 | digitalWrite(D7, data & 1); 59 | } 60 | 61 | unsigned char getdata() { 62 | unsigned char data; 63 | 64 | data = digitalRead(D7); data <<= 1; 65 | data |= digitalRead(D6); data <<= 1; 66 | data |= digitalRead(D5); data <<= 1; 67 | data |= digitalRead(D4); data <<= 1; 68 | data |= digitalRead(D3); data <<= 1; 69 | data |= digitalRead(D2); data <<= 1; 70 | data |= digitalRead(D1); data <<= 1; 71 | data |= digitalRead(D0); 72 | 73 | return data; 74 | } 75 | 76 | /* 77 | void setinput() { 78 | pinMode(D0, INPUT); 79 | pinMode(D1, INPUT); 80 | pinMode(D2, INPUT); 81 | pinMode(D3, INPUT); 82 | pinMode(D4, INPUT); 83 | pinMode(D5, INPUT); 84 | pinMode(D6, INPUT); 85 | pinMode(D7, INPUT); 86 | } 87 | 88 | void setoutput() { 89 | pinMode(D0, OUTPUT); 90 | pinMode(D1, OUTPUT); 91 | pinMode(D2, OUTPUT); 92 | pinMode(D3, OUTPUT); 93 | pinMode(D4, OUTPUT); 94 | pinMode(D5, OUTPUT); 95 | pinMode(D6, OUTPUT); 96 | pinMode(D7, OUTPUT); 97 | } 98 | */ 99 | 100 | void outb(unsigned short addr, unsigned char data) { 101 | //setoutput(); 102 | setaddr(addr); 103 | setdata(data); 104 | digitalWrite(IOW, 0); 105 | usleep(1); 106 | digitalWrite(IOW, 1); 107 | } 108 | 109 | void wr_adlib(unsigned char reg, unsigned char value) { 110 | outb(0x388, reg); usleep(3); 111 | outb(0x389, value), usleep(22); 112 | } 113 | 114 | int main() { 115 | int i, j, k, x, y, z, song_register, song_data, song_wait, song_offset = 0; 116 | unsigned char buffer[57306]; 117 | FILE *f; 118 | 119 | f = fopen("lemmings.dat", "rb"); 120 | fread(buffer, 1, 57306, f); 121 | fclose(f); 122 | 123 | wiringPiSetupGpio(); 124 | 125 | pinMode(LA, OUTPUT); 126 | pinMode(IOW, OUTPUT); 127 | pinMode(IOR, OUTPUT); 128 | pinMode(MEMW, OUTPUT); 129 | pinMode(MEMR, OUTPUT); 130 | pinMode(RESET, OUTPUT); 131 | digitalWrite(IOW, 1); 132 | digitalWrite(IOR, 1); 133 | digitalWrite(MEMW, 1); 134 | digitalWrite(MEMR, 1); 135 | 136 | // CONFIGURE ADDRESS PINS 137 | pinMode(A0, OUTPUT); 138 | pinMode(A1, OUTPUT); 139 | pinMode(A2, OUTPUT); 140 | pinMode(A3, OUTPUT); 141 | pinMode(A4, OUTPUT); 142 | pinMode(A5, OUTPUT); 143 | pinMode(A6, OUTPUT); 144 | pinMode(A7, OUTPUT); 145 | pinMode(A8, OUTPUT); 146 | pinMode(A9, OUTPUT); 147 | pinMode(A10, OUTPUT); 148 | pinMode(A11, OUTPUT); 149 | 150 | // CONFIGURE DATA PINS 151 | pinMode(D0, OUTPUT); 152 | pinMode(D1, OUTPUT); 153 | pinMode(D2, OUTPUT); 154 | pinMode(D3, OUTPUT); 155 | pinMode(D4, OUTPUT); 156 | pinMode(D5, OUTPUT); 157 | pinMode(D6, OUTPUT); 158 | pinMode(D7, OUTPUT); 159 | 160 | // RESET BUS 161 | digitalWrite(RESET, 1); usleep(100000); 162 | digitalWrite(RESET, 0); usleep(100000); 163 | 164 | // PLAY THE LEMMINGS SONG USING ADLIB 165 | for(;;) { 166 | song_register = buffer[song_offset]; 167 | song_offset++; 168 | if(song_register==0) { 169 | song_wait = (buffer[song_offset+1] << 8) | buffer[song_offset+0]; 170 | song_offset += 2; 171 | usleep(1786*song_wait); 172 | } else { 173 | song_data = buffer[song_offset]; song_offset++; 174 | song_wait = buffer[song_offset]; song_offset++; 175 | wr_adlib(song_register, song_data); 176 | usleep(1786*song_wait); 177 | } 178 | if(song_offset>57300) { 179 | for(i=0; i<256; i++) 180 | wr_adlib(i, 0); 181 | exit(0); 182 | } 183 | } 184 | 185 | return 0; 186 | } 187 | -------------------------------------------------------------------------------- /20231105-rpi2isa/play_raw.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "isa.h" 8 | 9 | void wr_adlib(unsigned char reg, unsigned char value) { 10 | outb(0x388, reg); usleep(3); 11 | outb(0x389, value), usleep(22); 12 | // 1 us is in the inb/outb 13 | } 14 | 15 | int main() { 16 | int i, j, k, x, y, z, song_register, song_data, song_wait, song_offset = 0; 17 | unsigned char buffer[64000]; 18 | FILE *f; 19 | 20 | f = fopen("lemmings.dat", "rb"); 21 | fread(buffer, 1, 57306, f); 22 | fclose(f); 23 | 24 | gpio = (unsigned int*)mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, open("/dev/gpiomem", O_RDWR|O_SYNC), 0); 25 | setoutput(); 26 | gpio[GPCLR0] = 0x0FFFFFFF; 27 | 28 | digitalWrite(IOW, 1); 29 | digitalWrite(IOR, 1); 30 | digitalWrite(MEMW, 1); 31 | digitalWrite(MEMR, 1); 32 | digitalWrite(RESET, 1); updatePins(); usleep(100000); 33 | digitalWrite(RESET, 0); updatePins(); usleep(100000); 34 | 35 | srand(time(0)); 36 | j = rand()&255; 37 | for(i=0; i<16; i++) { 38 | memw(0xA0000+i, (i+j) & 255); 39 | printf("%.2x ", (i+j) & 255); 40 | } 41 | printf("\n"); 42 | for(i=0; i<16; i++) 43 | printf("%.2x ", memr(0xA0000+i)); 44 | printf("\n"); 45 | for(i=0; i<16; i++) 46 | printf("%.2x ", memr(0xC0000+i)); 47 | printf("\n"); 48 | 49 | // PLAY THE LEMMINGS SONG USING ADLIB 50 | for(;;) { 51 | song_register = buffer[song_offset]; 52 | song_offset++; 53 | if(song_register==0) { 54 | song_wait = (buffer[song_offset+1] << 8) | buffer[song_offset+0]; 55 | song_offset += 2; 56 | usleep(1786*song_wait); 57 | } else { 58 | song_data = buffer[song_offset]; song_offset++; 59 | song_wait = buffer[song_offset]; song_offset++; 60 | wr_adlib(song_register, song_data); 61 | usleep(1786*song_wait); 62 | } 63 | if(song_offset>57300) { 64 | for(i=0; i<256; i++) 65 | wr_adlib(i, 0); 66 | exit(0); 67 | } 68 | } 69 | 70 | return 0; 71 | } 72 | -------------------------------------------------------------------------------- /20231105-rpi2isa/readc000.c: -------------------------------------------------------------------------------- 1 | // gcc -O0 readc000.c -l wiringPi -o readc000 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #define LA 23 9 | #define IOW 25 10 | #define IOR 11 11 | #define MEMR 9 12 | #define MEMW 10 13 | #define RESET 22 14 | 15 | #define D0 27 16 | #define D1 18 17 | #define D2 17 18 | #define D3 15 19 | #define D4 14 20 | #define D5 4 21 | #define D6 3 22 | #define D7 2 23 | 24 | #define A0 21 25 | #define A1 20 26 | #define A2 26 27 | #define A3 16 28 | #define A4 19 29 | #define A5 13 30 | #define A6 12 31 | #define A7 6 32 | #define A8 5 33 | #define A9 1 34 | #define A10 0 35 | #define A11 7 36 | 37 | void setaddr(unsigned short addr) { 38 | digitalWrite(A0, addr & 1); addr >>= 1; 39 | digitalWrite(A1, addr & 1); addr >>= 1; 40 | digitalWrite(A2, addr & 1); addr >>= 1; 41 | digitalWrite(A3, addr & 1); addr >>= 1; 42 | digitalWrite(A4, addr & 1); addr >>= 1; 43 | digitalWrite(A5, addr & 1); addr >>= 1; 44 | digitalWrite(A6, addr & 1); addr >>= 1; 45 | digitalWrite(A7, addr & 1); addr >>= 1; 46 | digitalWrite(A8, addr & 1); addr >>= 1; 47 | digitalWrite(A9, addr & 1); addr >>= 1; 48 | digitalWrite(A10, addr & 1); addr >>= 1; 49 | digitalWrite(A11, addr & 1); 50 | } 51 | 52 | void setdata(unsigned char data) { 53 | digitalWrite(D0, data & 1); data >>= 1; 54 | digitalWrite(D1, data & 1); data >>= 1; 55 | digitalWrite(D2, data & 1); data >>= 1; 56 | digitalWrite(D3, data & 1); data >>= 1; 57 | digitalWrite(D4, data & 1); data >>= 1; 58 | digitalWrite(D5, data & 1); data >>= 1; 59 | digitalWrite(D6, data & 1); data >>= 1; 60 | digitalWrite(D7, data & 1); 61 | } 62 | 63 | unsigned char getdata() { 64 | unsigned char data; 65 | 66 | data = digitalRead(D7); data <<= 1; 67 | data |= digitalRead(D6); data <<= 1; 68 | data |= digitalRead(D5); data <<= 1; 69 | data |= digitalRead(D4); data <<= 1; 70 | data |= digitalRead(D3); data <<= 1; 71 | data |= digitalRead(D2); data <<= 1; 72 | data |= digitalRead(D1); data <<= 1; 73 | data |= digitalRead(D0); 74 | 75 | return data; 76 | } 77 | 78 | void setinput() { 79 | pinMode(D0, INPUT); 80 | pinMode(D1, INPUT); 81 | pinMode(D2, INPUT); 82 | pinMode(D3, INPUT); 83 | pinMode(D4, INPUT); 84 | pinMode(D5, INPUT); 85 | pinMode(D6, INPUT); 86 | pinMode(D7, INPUT); 87 | } 88 | 89 | void setoutput() { 90 | pinMode(D0, OUTPUT); 91 | pinMode(D1, OUTPUT); 92 | pinMode(D2, OUTPUT); 93 | pinMode(D3, OUTPUT); 94 | pinMode(D4, OUTPUT); 95 | pinMode(D5, OUTPUT); 96 | pinMode(D6, OUTPUT); 97 | pinMode(D7, OUTPUT); 98 | } 99 | 100 | unsigned char inb(unsigned short addr) { 101 | unsigned char data; 102 | 103 | setinput(); 104 | setaddr(addr); 105 | digitalWrite(IOR, 0); usleep(1); 106 | data = getdata(); 107 | digitalWrite(IOR, 1); usleep(1); 108 | 109 | return data; 110 | } 111 | 112 | void outb(unsigned short addr, unsigned char data) { 113 | setoutput(); 114 | setaddr(addr); 115 | setdata(data); 116 | digitalWrite(IOW, 0); usleep(1); 117 | digitalWrite(IOW, 1); usleep(1); 118 | } 119 | 120 | void memw(unsigned int addr, unsigned char data) { 121 | int i; 122 | 123 | setoutput(); 124 | setaddr((addr >> 12) & 0xFF); 125 | digitalWrite(LA, 1); 126 | digitalWrite(LA, 0); 127 | setaddr(addr & 0xFFF); 128 | setdata(data); 129 | digitalWrite(MEMW, 0); for(i=0; i<256; i++); 130 | digitalWrite(MEMW, 1); for(i=0; i<256; i++); 131 | } 132 | 133 | unsigned char memr(unsigned int addr) { 134 | unsigned char data, l; 135 | 136 | setinput(); 137 | setaddr((addr >> 12) & 0xFF); 138 | digitalWrite(LA, 1); 139 | digitalWrite(LA, 0); 140 | setaddr(addr & 0xFFF); 141 | digitalWrite(MEMR, 0); usleep(1); 142 | data = getdata(); 143 | digitalWrite(MEMR, 1); usleep(1); 144 | 145 | return data; 146 | } 147 | 148 | int main() { 149 | int i, j, k; 150 | int x, y, z; 151 | 152 | wiringPiSetupGpio(); 153 | 154 | pinMode(LA, OUTPUT); 155 | pinMode(IOW, OUTPUT); 156 | pinMode(IOR, OUTPUT); 157 | pinMode(MEMW, OUTPUT); 158 | pinMode(MEMR, OUTPUT); 159 | pinMode(RESET, OUTPUT); 160 | digitalWrite(IOW, 1); 161 | digitalWrite(IOR, 1); 162 | digitalWrite(MEMW, 1); 163 | digitalWrite(MEMR, 1); 164 | 165 | // CONFIGURE ADDRESS PINS 166 | pinMode(A0, OUTPUT); 167 | pinMode(A1, OUTPUT); 168 | pinMode(A2, OUTPUT); 169 | pinMode(A3, OUTPUT); 170 | pinMode(A4, OUTPUT); 171 | pinMode(A5, OUTPUT); 172 | pinMode(A6, OUTPUT); 173 | pinMode(A7, OUTPUT); 174 | pinMode(A8, OUTPUT); 175 | pinMode(A9, OUTPUT); 176 | pinMode(A10, OUTPUT); 177 | pinMode(A11, OUTPUT); 178 | 179 | // CONFIGURE DATA PINS 180 | pinMode(D0, INPUT); 181 | pinMode(D1, INPUT); 182 | pinMode(D2, INPUT); 183 | pinMode(D3, INPUT); 184 | pinMode(D4, INPUT); 185 | pinMode(D5, INPUT); 186 | pinMode(D6, INPUT); 187 | pinMode(D7, INPUT); 188 | 189 | // RESET 190 | digitalWrite(RESET, 1); usleep(100000); 191 | digitalWrite(RESET, 0); usleep(500000); 192 | 193 | k = 32; 194 | for(i=0; i<32768/k; i++) { 195 | for(j=0; j 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include "isa.h" 7 | 8 | int main() { 9 | int i, j, k, x, y, z; 10 | unsigned char buffer[32768]; 11 | FILE *f; 12 | 13 | gpio = (unsigned int*)mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, open("/dev/gpiomem", O_RDWR|O_SYNC), 0); 14 | digitalWrite(IOW, 1); 15 | digitalWrite(IOR, 1); 16 | digitalWrite(MEMW, 1); 17 | digitalWrite(MEMR, 1); 18 | digitalWrite(RESET, 1); updatePins(); usleep(100000); 19 | digitalWrite(RESET, 0); updatePins(); usleep(500000); 20 | 21 | for(i=0; i<32768; i++) 22 | buffer[i] = memr(0xC0000+i); 23 | 24 | f = fopen("vgarom.dat", "wb"); 25 | fwrite(buffer, 1, 32768, f); 26 | fclose(f); 27 | 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /20231105-rpi2isa/vga.c: -------------------------------------------------------------------------------- 1 | // gcc -O2 vga.c -l wiringPi -o vga 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #define LA 23 8 | #define IOW 25 9 | #define IOR 11 10 | #define MEMR 9 11 | #define MEMW 10 12 | #define RESET 22 13 | #define READY 24 14 | 15 | #define D0 27 16 | #define D1 18 17 | #define D2 17 18 | #define D3 15 19 | #define D4 14 20 | #define D5 4 21 | #define D6 3 22 | #define D7 2 23 | 24 | #define A00 21 25 | #define A01 20 26 | #define A02 26 27 | #define A03 16 28 | #define A04 19 29 | #define A05 13 30 | #define A06 12 31 | #define A07 6 32 | #define A08 5 33 | #define A09 1 34 | #define A10 0 35 | #define A11 7 36 | 37 | volatile int mode = 0; 38 | volatile int oldaddr = 0; 39 | 40 | void setaddr(int addr) { 41 | digitalWrite(A00, addr & 1); addr >>= 1; 42 | digitalWrite(A01, addr & 1); addr >>= 1; 43 | digitalWrite(A02, addr & 1); addr >>= 1; 44 | digitalWrite(A03, addr & 1); addr >>= 1; 45 | digitalWrite(A04, addr & 1); addr >>= 1; 46 | digitalWrite(A05, addr & 1); addr >>= 1; 47 | digitalWrite(A06, addr & 1); addr >>= 1; 48 | digitalWrite(A07, addr & 1); addr >>= 1; 49 | digitalWrite(A08, addr & 1); addr >>= 1; 50 | digitalWrite(A09, addr & 1); addr >>= 1; 51 | digitalWrite(A10, addr & 1); addr >>= 1; 52 | digitalWrite(A11, addr & 1); 53 | } 54 | 55 | void setdata(int data) { 56 | digitalWrite(D0, data & 1); data >>= 1; 57 | digitalWrite(D1, data & 1); data >>= 1; 58 | digitalWrite(D2, data & 1); data >>= 1; 59 | digitalWrite(D3, data & 1); data >>= 1; 60 | digitalWrite(D4, data & 1); data >>= 1; 61 | digitalWrite(D5, data & 1); data >>= 1; 62 | digitalWrite(D6, data & 1); data >>= 1; 63 | digitalWrite(D7, data & 1); 64 | } 65 | 66 | int getdata() { 67 | int data; 68 | 69 | data = digitalRead(D7); data <<= 1; 70 | data |= digitalRead(D6); data <<= 1; 71 | data |= digitalRead(D5); data <<= 1; 72 | data |= digitalRead(D4); data <<= 1; 73 | data |= digitalRead(D3); data <<= 1; 74 | data |= digitalRead(D2); data <<= 1; 75 | data |= digitalRead(D1); data <<= 1; 76 | data |= digitalRead(D0); 77 | 78 | return data; 79 | } 80 | 81 | void setinput() { 82 | pinMode(D0, INPUT); 83 | pinMode(D1, INPUT); 84 | pinMode(D2, INPUT); 85 | pinMode(D3, INPUT); 86 | pinMode(D4, INPUT); 87 | pinMode(D5, INPUT); 88 | pinMode(D6, INPUT); 89 | pinMode(D7, INPUT); 90 | mode = 0; 91 | } 92 | 93 | void setoutput() { 94 | pinMode(D0, OUTPUT); 95 | pinMode(D1, OUTPUT); 96 | pinMode(D2, OUTPUT); 97 | pinMode(D3, OUTPUT); 98 | pinMode(D4, OUTPUT); 99 | pinMode(D5, OUTPUT); 100 | pinMode(D6, OUTPUT); 101 | pinMode(D7, OUTPUT); 102 | mode = 1; 103 | } 104 | 105 | int inb(int addr) { 106 | int data; 107 | 108 | if(mode==1) setinput(); 109 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF) ) { 110 | setaddr((addr >> 12) & 0xFF); 111 | digitalWrite(LA, 1); 112 | digitalWrite(LA, 0); 113 | oldaddr = addr; 114 | } 115 | setaddr(addr & 0xFFF); 116 | digitalWrite(IOR, 0); 117 | usleep(1); 118 | data = getdata(); 119 | digitalWrite(IOR, 1); 120 | 121 | return data; 122 | } 123 | 124 | void outb(int addr, int data) { 125 | if(mode==0) setoutput(); 126 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF) ) { 127 | setaddr((addr >> 12) & 0xFF); 128 | digitalWrite(LA, 1); 129 | digitalWrite(LA, 0); 130 | oldaddr = addr; 131 | } 132 | setaddr(addr & 0xFFF); 133 | setdata(data); 134 | digitalWrite(IOW, 0); 135 | usleep(1); 136 | digitalWrite(IOW, 1); 137 | } 138 | 139 | void memw(int addr, int data) { 140 | if(mode==0) setoutput(); 141 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF) ) { 142 | setaddr((addr >> 12) & 0xFF); 143 | digitalWrite(LA, 1); 144 | digitalWrite(LA, 0); 145 | oldaddr = addr; 146 | } 147 | setaddr(addr & 0xFFF); 148 | setdata(data); 149 | digitalWrite(MEMW, 0); 150 | while(!digitalRead(READY)) { printf("*"); fflush(stdout); } 151 | digitalWrite(MEMW, 1); 152 | } 153 | 154 | int memr(int addr) { 155 | int data; 156 | 157 | if(mode==1) setinput(); 158 | if( ((addr >> 12) & 0xFF) != ((oldaddr >> 12) & 0xFF)) { 159 | setaddr((addr >> 12) & 0xFF); 160 | digitalWrite(LA, 1); 161 | digitalWrite(LA, 0); 162 | oldaddr = addr; 163 | } 164 | setaddr(addr & 0xFFF); 165 | digitalWrite(MEMR, 0); 166 | while(!digitalRead(READY)) { printf("*"); fflush(stdout); } 167 | data = getdata(); 168 | digitalWrite(MEMR, 1); 169 | 170 | return data; 171 | } 172 | 173 | void init_vga(void) { 174 | for(int i=0; i<256; i++) memw(0xA0000+i, i); 175 | 176 | // RESET BUS 177 | digitalWrite(RESET, 1); usleep(100000); 178 | digitalWrite(RESET, 0); usleep(100000); 179 | 180 | // ET4000: set key 181 | outb(0x3bf, 3); 182 | outb(0x3d8, 0xa0); 183 | //usleep(100000); 184 | 185 | // ET4000: set clocks 186 | outb(0x3c4, 0x07); 187 | outb(0x3c5, 0xfc); 188 | 189 | // MISC register at port 3c2 190 | outb(0x3c2, 0x63); 191 | 192 | // ATC registers at port 3c0 193 | for(int i=0; i<0x10; i++) { 194 | inb(0x3da); 195 | outb(0x3c0, i); 196 | outb(0x3c0, i); 197 | } 198 | outb(0x3c0, 0x30); outb(0x3c0, 0x41); 199 | outb(0x3c0, 0x31); outb(0x3c0, 0x00); 200 | outb(0x3c0, 0x32); outb(0x3c0, 0x0f); 201 | outb(0x3c0, 0x33); outb(0x3c0, 0x00); 202 | outb(0x3c0, 0x34); outb(0x3c0, 0x00); 203 | 204 | // SEQ registers at port 3c4 205 | outb(0x3c4, 0x00); outb(0x3c5, 0x03); 206 | outb(0x3c4, 0x01); outb(0x3c5, 0x01); 207 | outb(0x3c4, 0x02); outb(0x3c5, 0x0f); 208 | outb(0x3c4, 0x03); outb(0x3c5, 0x00); 209 | outb(0x3c4, 0x04); outb(0x3c5, 0x0e); 210 | 211 | // GDC registers at port 3ce 212 | outb(0x3ce, 0x00); outb(0x3cf, 0x00); 213 | outb(0x3ce, 0x01); outb(0x3cf, 0x00); 214 | outb(0x3ce, 0x02); outb(0x3cf, 0x00); 215 | outb(0x3ce, 0x03); outb(0x3cf, 0x00); 216 | outb(0x3ce, 0x04); outb(0x3cf, 0x00); 217 | outb(0x3ce, 0x05); outb(0x3cf, 0x40); 218 | outb(0x3ce, 0x06); outb(0x3cf, 0x05); 219 | outb(0x3ce, 0x07); outb(0x3cf, 0x0f); 220 | outb(0x3ce, 0x08); outb(0x3cf, 0xff); 221 | 222 | // CRTC registers at port 3d4 223 | outb(0x3d4, 0x11); outb(0x3d5, 0x00); 224 | outb(0x3d4, 0x00); outb(0x3d5, 0x5f); 225 | outb(0x3d4, 0x01); outb(0x3d5, 0x4f); 226 | outb(0x3d4, 0x02); outb(0x3d5, 0x50); 227 | outb(0x3d4, 0x03); outb(0x3d5, 0x82); 228 | outb(0x3d4, 0x04); outb(0x3d5, 0x54); 229 | outb(0x3d4, 0x05); outb(0x3d5, 0x80); 230 | outb(0x3d4, 0x06); outb(0x3d5, 0xbf); 231 | outb(0x3d4, 0x07); outb(0x3d5, 0x1f); 232 | outb(0x3d4, 0x08); outb(0x3d5, 0x00); 233 | outb(0x3d4, 0x09); outb(0x3d5, 0x41); 234 | outb(0x3d4, 0x0a); outb(0x3d5, 0x00); 235 | outb(0x3d4, 0x0b); outb(0x3d5, 0x00); 236 | outb(0x3d4, 0x0c); outb(0x3d5, 0x00); 237 | outb(0x3d4, 0x0d); outb(0x3d5, 0x00); 238 | outb(0x3d4, 0x0e); outb(0x3d5, 0x00); 239 | outb(0x3d4, 0x0f); outb(0x3d5, 0x00); 240 | outb(0x3d4, 0x10); outb(0x3d5, 0x9c); 241 | outb(0x3d4, 0x11); outb(0x3d5, 0x8e); 242 | outb(0x3d4, 0x12); outb(0x3d5, 0x8f); 243 | outb(0x3d4, 0x13); outb(0x3d5, 0x28); 244 | outb(0x3d4, 0x14); outb(0x3d5, 0x40); 245 | outb(0x3d4, 0x15); outb(0x3d5, 0x96); 246 | outb(0x3d4, 0x16); outb(0x3d5, 0xb9); 247 | outb(0x3d4, 0x17); outb(0x3d5, 0xa3); 248 | outb(0x3d4, 0x18); outb(0x3d5, 0xff); 249 | 250 | /* Enable video */ 251 | outb(0x3c0, 0x20); 252 | int j = inb(0x3da); 253 | 254 | for(int i=0; i<8000; i++) memw(0xA0000+i, i); 255 | 256 | /* Set palette */ 257 | outb(0x3c6, 0xff); // PEL mask 258 | for(;;) { 259 | outb(0x3c8, 0); 260 | outb(0x3c9, rand() % 64); 261 | outb(0x3c9, rand() % 64); 262 | outb(0x3c9, rand() % 64); 263 | usleep(100000); 264 | } 265 | /* 266 | outb(0x3c8, 0); // Palette register 267 | for(int i=0; i<64; i++) { 268 | outb(0x3c9, i & 63); 269 | outb(0x3c9, 0); 270 | outb(0x3c9, 0); 271 | } 272 | for(int i=0; i<64; i++) { 273 | outb(0x3c9, 0); 274 | outb(0x3c9, i & 63); 275 | outb(0x3c9, 0); 276 | } 277 | for(int i=0; i<64; i++) { 278 | outb(0x3c9, 0); 279 | outb(0x3c9, 0); 280 | outb(0x3c9, i & 63); 281 | } 282 | for(int i=0; i<64; i++) { 283 | outb(0x3c9, i & 63); 284 | outb(0x3c9, i & 63); 285 | outb(0x3c9, i & 63); 286 | } 287 | */ 288 | } 289 | 290 | int main() { 291 | int i, j, k, x, y, z; 292 | 293 | wiringPiSetupGpio(); 294 | 295 | pinMode(READY, INPUT); 296 | pinMode(LA, OUTPUT); 297 | pinMode(IOW, OUTPUT); 298 | pinMode(IOR, OUTPUT); 299 | pinMode(MEMW, OUTPUT); 300 | pinMode(MEMR, OUTPUT); 301 | pinMode(RESET, OUTPUT); 302 | digitalWrite(IOW, 1); 303 | digitalWrite(IOR, 1); 304 | digitalWrite(MEMW, 1); 305 | digitalWrite(MEMR, 1); 306 | 307 | // CONFIGURE ADDRESS PINS 308 | pinMode(A00, OUTPUT); 309 | pinMode(A01, OUTPUT); 310 | pinMode(A02, OUTPUT); 311 | pinMode(A03, OUTPUT); 312 | pinMode(A04, OUTPUT); 313 | pinMode(A05, OUTPUT); 314 | pinMode(A06, OUTPUT); 315 | pinMode(A07, OUTPUT); 316 | pinMode(A08, OUTPUT); 317 | pinMode(A09, OUTPUT); 318 | pinMode(A10, OUTPUT); 319 | pinMode(A11, OUTPUT); 320 | 321 | // CONFIGURE DATA PINS 322 | pinMode(D0, INPUT); 323 | pinMode(D1, INPUT); 324 | pinMode(D2, INPUT); 325 | pinMode(D3, INPUT); 326 | pinMode(D4, INPUT); 327 | pinMode(D5, INPUT); 328 | pinMode(D6, INPUT); 329 | pinMode(D7, INPUT); 330 | 331 | init_vga(); 332 | /* 333 | for(i=0; i<70; i++) { 334 | for(y=0; y<200; y++) 335 | for(x=0; x<320; x++) 336 | memw(0xA0000 + x + y*320, rand()&255); 337 | } 338 | 339 | for(;;) { 340 | outb(0x3c6, 0xff); 341 | outb(0x3c8, 0); 342 | for(i=0; i<256; i++) { 343 | outb(0x3c9, rand()&63); 344 | outb(0x3c9, rand()&63); 345 | outb(0x3c9, rand()&63); 346 | } 347 | usleep(100000); 348 | } 349 | */ 350 | return 0; 351 | } 352 | -------------------------------------------------------------------------------- /20231105-rpi2isa/vga_raw.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "isa.h" 8 | 9 | void init_vga(void) { 10 | // ET4000: set key 11 | outb(0x3bf, 3); 12 | outb(0x3d8, 0xa0); 13 | //usleep(100000); 14 | 15 | // ET4000: set clocks 16 | outb(0x3c4, 0x07); 17 | outb(0x3c5, 0xfc); 18 | //usleep(100000); 19 | 20 | // MISC register at port 3c2 21 | outb(0x3c2, 0x63); 22 | 23 | // ATC registers at port 3c0 24 | for(int i=0; i<0x10; i++) { 25 | inb(0x3da); 26 | outb(0x3c0, i); 27 | outb(0x3c0, i); 28 | } 29 | outb(0x3c0, 0x30); outb(0x3c0, 0x41); 30 | outb(0x3c0, 0x31); outb(0x3c0, 0x00); 31 | outb(0x3c0, 0x32); outb(0x3c0, 0x0f); 32 | outb(0x3c0, 0x33); outb(0x3c0, 0x00); 33 | outb(0x3c0, 0x34); outb(0x3c0, 0x00); 34 | 35 | // SEQ registers at port 3c4 36 | outb(0x3c4, 0x00); outb(0x3c5, 0x03); 37 | outb(0x3c4, 0x01); outb(0x3c5, 0x01); 38 | outb(0x3c4, 0x02); outb(0x3c5, 0x0f); 39 | outb(0x3c4, 0x03); outb(0x3c5, 0x00); 40 | outb(0x3c4, 0x04); outb(0x3c5, 0x0e); 41 | 42 | // GDC registers at port 3ce 43 | outb(0x3ce, 0x00); outb(0x3cf, 0x00); 44 | outb(0x3ce, 0x01); outb(0x3cf, 0x00); 45 | outb(0x3ce, 0x02); outb(0x3cf, 0x00); 46 | outb(0x3ce, 0x03); outb(0x3cf, 0x00); 47 | outb(0x3ce, 0x04); outb(0x3cf, 0x00); 48 | outb(0x3ce, 0x05); outb(0x3cf, 0x40); 49 | outb(0x3ce, 0x06); outb(0x3cf, 0x05); 50 | outb(0x3ce, 0x07); outb(0x3cf, 0x0f); 51 | outb(0x3ce, 0x08); outb(0x3cf, 0xff); 52 | 53 | // CRTC registers at port 3d4 54 | outb(0x3d4, 0x11); outb(0x3d5, 0x00); 55 | outb(0x3d4, 0x00); outb(0x3d5, 0x5f); 56 | outb(0x3d4, 0x01); outb(0x3d5, 0x4f); 57 | outb(0x3d4, 0x02); outb(0x3d5, 0x50); 58 | outb(0x3d4, 0x03); outb(0x3d5, 0x82); 59 | outb(0x3d4, 0x04); outb(0x3d5, 0x54); 60 | outb(0x3d4, 0x05); outb(0x3d5, 0x80); 61 | outb(0x3d4, 0x06); outb(0x3d5, 0xbf); 62 | outb(0x3d4, 0x07); outb(0x3d5, 0x1f); 63 | outb(0x3d4, 0x08); outb(0x3d5, 0x00); 64 | outb(0x3d4, 0x09); outb(0x3d5, 0x41); 65 | outb(0x3d4, 0x0a); outb(0x3d5, 0x00); 66 | outb(0x3d4, 0x0b); outb(0x3d5, 0x00); 67 | outb(0x3d4, 0x0c); outb(0x3d5, 0x00); 68 | outb(0x3d4, 0x0d); outb(0x3d5, 0x00); 69 | outb(0x3d4, 0x0e); outb(0x3d5, 0x00); 70 | outb(0x3d4, 0x0f); outb(0x3d5, 0x00); 71 | outb(0x3d4, 0x10); outb(0x3d5, 0x9c); 72 | outb(0x3d4, 0x11); outb(0x3d5, 0x8e); 73 | outb(0x3d4, 0x12); outb(0x3d5, 0x8f); 74 | outb(0x3d4, 0x13); outb(0x3d5, 0x28); 75 | outb(0x3d4, 0x14); outb(0x3d5, 0x40); 76 | outb(0x3d4, 0x15); outb(0x3d5, 0x96); 77 | outb(0x3d4, 0x16); outb(0x3d5, 0xb9); 78 | outb(0x3d4, 0x17); outb(0x3d5, 0xa3); 79 | outb(0x3d4, 0x18); outb(0x3d5, 0xff); 80 | 81 | /* Enable video */ 82 | outb(0x3c0, 0x20); 83 | //printf("%d\n", inb(0x3da)); 84 | 85 | /* Set palette */ 86 | outb(0x3c6, 0xff); // PEL mask 87 | outb(0x3c8, 0); // Palette register 88 | for(int i=0; i<64; i++) { 89 | outb(0x3c9, i & 63); 90 | outb(0x3c9, 0); 91 | outb(0x3c9, 0); 92 | } 93 | for(int i=0; i<64; i++) { 94 | outb(0x3c9, 0); 95 | outb(0x3c9, i & 63); 96 | outb(0x3c9, 0); 97 | } 98 | for(int i=0; i<64; i++) { 99 | outb(0x3c9, 0); 100 | outb(0x3c9, 0); 101 | outb(0x3c9, i & 63); 102 | } 103 | for(int i=0; i<64; i++) { 104 | outb(0x3c9, i & 63); 105 | outb(0x3c9, i & 63); 106 | outb(0x3c9, i & 63); 107 | } 108 | } 109 | 110 | int main() { 111 | int i, j, k, x, y, z; 112 | 113 | gpio = (unsigned int*)mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, open("/dev/gpiomem", O_RDWR|O_SYNC), 0); 114 | setoutput(); 115 | gpio[GPCLR0] = 0x0FFFFFFF; 116 | 117 | digitalWrite(IOW, 1); 118 | digitalWrite(IOR, 1); 119 | digitalWrite(MEMW, 1); 120 | digitalWrite(MEMR, 1); 121 | digitalWrite(RESET, 1); updatePins(); usleep(200000); 122 | digitalWrite(RESET, 0); updatePins(); usleep(300000); 123 | for(i=0; i<256; i++) memw(0xA0000+i, i); 124 | init_vga(); 125 | 126 | for(y=100; y<200; y++) 127 | for(x=0; x<320; x++) 128 | memw(0xA0000 + x + y*320, (x & 63) + 64*((y >> 3)& 3)); 129 | 130 | struct timeval t0, t1; 131 | gettimeofday(&t0, NULL); 132 | for(z=0; z<200; z++) { 133 | for(y=0; y<100; y++) 134 | for(x=0; x<320; x++) 135 | memw(0xA0000 + x + y*320, rand()&255); 136 | } 137 | gettimeofday(&t1, NULL); 138 | printf("%fe6 bytes/second\n", 200.0*32000.0/(1000000 * t1.tv_sec + t1.tv_usec - 1000000 * t0.tv_sec - t0.tv_usec)); 139 | // printf("%d\n", wcnt); 140 | /* 141 | for(;;) { 142 | outb(0x3c8, 0); 143 | for(int i=0; i<256; i++) { 144 | outb(0x3c9, rand()&63); 145 | outb(0x3c9, rand()&63); 146 | outb(0x3c9, rand()&63); 147 | } 148 | usleep(100000); 149 | } 150 | */ 151 | 152 | return 0; 153 | } 154 | -------------------------------------------------------------------------------- /ISARPiv2/ISARPiv2-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Connector_Bus_ISA_8bit 5 | # 6 | DEF Connector_Bus_ISA_8bit J 0 20 Y Y 1 F N 7 | F0 "J" 0 1675 50 H V C CNN 8 | F1 "Connector_Bus_ISA_8bit" 0 -1675 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | DRAW 12 | S -600 -1600 600 1600 0 1 10 f 13 | X GND 1 -700 1500 100 R 50 50 1 1 W 14 | X GND 10 -700 600 100 R 50 50 1 1 W 15 | X ~SMEMW 11 -700 500 100 R 50 50 1 1 O 16 | X ~SMEMR 12 -700 400 100 R 50 50 1 1 O 17 | X ~IOW 13 -700 300 100 R 50 50 1 1 O 18 | X ~IOR 14 -700 200 100 R 50 50 1 1 O 19 | X ~DACK3 15 -700 100 100 R 50 50 1 1 P 20 | X DRQ3 16 -700 0 100 R 50 50 1 1 P 21 | X ~DACK1 17 -700 -100 100 R 50 50 1 1 P 22 | X DRQ1 18 -700 -200 100 R 50 50 1 1 P 23 | X ~DACK0 19 -700 -300 100 R 50 50 1 1 P 24 | X RESET 2 -700 1400 100 R 50 50 1 1 O 25 | X CLK 20 -700 -400 100 R 50 50 1 1 O 26 | X IRQ7 21 -700 -500 100 R 50 50 1 1 P 27 | X IRQ6 22 -700 -600 100 R 50 50 1 1 P 28 | X IRQ5 23 -700 -700 100 R 50 50 1 1 P 29 | X IRQ4 24 -700 -800 100 R 50 50 1 1 P 30 | X IRQ3 25 -700 -900 100 R 50 50 1 1 P 31 | X ~DACK2 26 -700 -1000 100 R 50 50 1 1 P 32 | X TC 27 -700 -1100 100 R 50 50 1 1 P 33 | X ALE 28 -700 -1200 100 R 50 50 1 1 O 34 | X VCC 29 -700 -1300 100 R 50 50 1 1 W 35 | X VCC 3 -700 1300 100 R 50 50 1 1 W 36 | X OSC 30 -700 -1400 100 R 50 50 1 1 O 37 | X GND 31 -700 -1500 100 R 50 50 1 1 W 38 | X IO 32 700 1500 100 L 50 50 1 1 P 39 | X DB7 33 700 1400 100 L 50 50 1 1 T 40 | X DB6 34 700 1300 100 L 50 50 1 1 T 41 | X DB5 35 700 1200 100 L 50 50 1 1 T 42 | X DB4 36 700 1100 100 L 50 50 1 1 T 43 | X DB3 37 700 1000 100 L 50 50 1 1 T 44 | X DB2 38 700 900 100 L 50 50 1 1 T 45 | X DB1 39 700 800 100 L 50 50 1 1 T 46 | X INQ2 4 -700 1200 100 R 50 50 1 1 P 47 | X DB0 40 700 700 100 L 50 50 1 1 T 48 | X IO_READY 41 700 600 100 L 50 50 1 1 P 49 | X AEN 42 700 500 100 L 50 50 1 1 O 50 | X BA19 43 700 400 100 L 50 50 1 1 T 51 | X BA18 44 700 300 100 L 50 50 1 1 T 52 | X BA17 45 700 200 100 L 50 50 1 1 T 53 | X BA16 46 700 100 100 L 50 50 1 1 T 54 | X BA15 47 700 0 100 L 50 50 1 1 T 55 | X BA14 48 700 -100 100 L 50 50 1 1 T 56 | X BA13 49 700 -200 100 L 50 50 1 1 T 57 | X -5V 5 -700 1100 100 R 50 50 1 1 W 58 | X BA12 50 700 -300 100 L 50 50 1 1 T 59 | X BA11 51 700 -400 100 L 50 50 1 1 T 60 | X BA10 52 700 -500 100 L 50 50 1 1 T 61 | X BA09 53 700 -600 100 L 50 50 1 1 T 62 | X BA08 54 700 -700 100 L 50 50 1 1 T 63 | X BA07 55 700 -800 100 L 50 50 1 1 T 64 | X BA06 56 700 -900 100 L 50 50 1 1 T 65 | X BA05 57 700 -1000 100 L 50 50 1 1 T 66 | X BA04 58 700 -1100 100 L 50 50 1 1 T 67 | X BA03 59 700 -1200 100 L 50 50 1 1 T 68 | X DRQ2 6 -700 1000 100 R 50 50 1 1 P 69 | X BA02 60 700 -1300 100 L 50 50 1 1 T 70 | X BA01 61 700 -1400 100 L 50 50 1 1 T 71 | X BA00 62 700 -1500 100 L 50 50 1 1 T 72 | X -12V 7 -700 900 100 R 50 50 1 1 W 73 | X UNUSED 8 -700 800 100 R 50 50 1 1 P 74 | X +12V 9 -700 700 100 R 50 50 1 1 W 75 | ENDDRAW 76 | ENDDEF 77 | # 78 | # Connector_Generic_Conn_02x10_Counter_Clockwise 79 | # 80 | DEF Connector_Generic_Conn_02x10_Counter_Clockwise J 0 40 Y N 1 F N 81 | F0 "J" 50 500 50 H V C CNN 82 | F1 "Connector_Generic_Conn_02x10_Counter_Clockwise" 50 -600 50 H V C CNN 83 | F2 "" 0 0 50 H I C CNN 84 | F3 "" 0 0 50 H I C CNN 85 | $FPLIST 86 | Connector*:*_2x??_* 87 | $ENDFPLIST 88 | DRAW 89 | S -50 -495 0 -505 1 1 6 N 90 | S -50 -395 0 -405 1 1 6 N 91 | S -50 -295 0 -305 1 1 6 N 92 | S -50 -195 0 -205 1 1 6 N 93 | S -50 -95 0 -105 1 1 6 N 94 | S -50 5 0 -5 1 1 6 N 95 | S -50 105 0 95 1 1 6 N 96 | S -50 205 0 195 1 1 6 N 97 | S -50 305 0 295 1 1 6 N 98 | S -50 405 0 395 1 1 6 N 99 | S -50 450 150 -550 1 1 10 f 100 | S 150 -495 100 -505 1 1 6 N 101 | S 150 -395 100 -405 1 1 6 N 102 | S 150 -295 100 -305 1 1 6 N 103 | S 150 -195 100 -205 1 1 6 N 104 | S 150 -95 100 -105 1 1 6 N 105 | S 150 5 100 -5 1 1 6 N 106 | S 150 105 100 95 1 1 6 N 107 | S 150 205 100 195 1 1 6 N 108 | S 150 305 100 295 1 1 6 N 109 | S 150 405 100 395 1 1 6 N 110 | X Pin_1 1 -200 400 150 R 50 50 1 1 P 111 | X Pin_10 10 -200 -500 150 R 50 50 1 1 P 112 | X Pin_11 11 300 -500 150 L 50 50 1 1 P 113 | X Pin_12 12 300 -400 150 L 50 50 1 1 P 114 | X Pin_13 13 300 -300 150 L 50 50 1 1 P 115 | X Pin_14 14 300 -200 150 L 50 50 1 1 P 116 | X Pin_15 15 300 -100 150 L 50 50 1 1 P 117 | X Pin_16 16 300 0 150 L 50 50 1 1 P 118 | X Pin_17 17 300 100 150 L 50 50 1 1 P 119 | X Pin_18 18 300 200 150 L 50 50 1 1 P 120 | X Pin_19 19 300 300 150 L 50 50 1 1 P 121 | X Pin_2 2 -200 300 150 R 50 50 1 1 P 122 | X Pin_20 20 300 400 150 L 50 50 1 1 P 123 | X Pin_3 3 -200 200 150 R 50 50 1 1 P 124 | X Pin_4 4 -200 100 150 R 50 50 1 1 P 125 | X Pin_5 5 -200 0 150 R 50 50 1 1 P 126 | X Pin_6 6 -200 -100 150 R 50 50 1 1 P 127 | X Pin_7 7 -200 -200 150 R 50 50 1 1 P 128 | X Pin_8 8 -200 -300 150 R 50 50 1 1 P 129 | X Pin_9 9 -200 -400 150 R 50 50 1 1 P 130 | ENDDRAW 131 | ENDDEF 132 | # 133 | # Connector_Raspberry_Pi_2_3 134 | # 135 | DEF Connector_Raspberry_Pi_2_3 J 0 40 Y Y 1 F N 136 | F0 "J" -700 1250 50 H V L BNN 137 | F1 "Connector_Raspberry_Pi_2_3" 400 -1250 50 H V L TNN 138 | F2 "" 0 0 50 H I C CNN 139 | F3 "" 0 0 50 H I C CNN 140 | $FPLIST 141 | PinHeader*2x20*P2.54mm*Vertical* 142 | PinSocket*2x20*P2.54mm*Vertical* 143 | $ENDFPLIST 144 | DRAW 145 | S -700 1200 700 -1200 0 1 10 f 146 | S -665 -690 -700 -710 1 1 0 N 147 | S -665 -590 -700 -610 1 1 0 N 148 | S -665 -490 -700 -510 1 1 0 N 149 | S -665 -390 -700 -410 1 1 0 N 150 | S -665 -290 -700 -310 1 1 0 N 151 | S -665 -190 -700 -210 1 1 0 N 152 | S -665 10 -700 -10 1 1 0 N 153 | S -665 110 -700 90 1 1 0 N 154 | S -665 210 -700 190 1 1 0 N 155 | S -665 410 -700 390 1 1 0 N 156 | S -665 510 -700 490 1 1 0 N 157 | S -665 610 -700 590 1 1 0 N 158 | S -665 810 -700 790 1 1 0 N 159 | S -665 910 -700 890 1 1 0 N 160 | S -410 -1165 -390 -1200 1 1 0 N 161 | S -310 -1165 -290 -1200 1 1 0 N 162 | S -210 -1165 -190 -1200 1 1 0 N 163 | S -210 1200 -190 1165 1 1 0 N 164 | S -110 -1165 -90 -1200 1 1 0 N 165 | S -110 1200 -90 1165 1 1 0 N 166 | S -10 -1165 10 -1200 1 1 0 N 167 | S 90 -1165 110 -1200 1 1 0 N 168 | S 90 1200 110 1165 1 1 0 N 169 | S 190 -1165 210 -1200 1 1 0 N 170 | S 190 1200 210 1165 1 1 0 N 171 | S 290 -1165 310 -1200 1 1 0 N 172 | S 700 -790 665 -810 1 1 0 N 173 | S 700 -690 665 -710 1 1 0 N 174 | S 700 -490 665 -510 1 1 0 N 175 | S 700 -390 665 -410 1 1 0 N 176 | S 700 -290 665 -310 1 1 0 N 177 | S 700 -190 665 -210 1 1 0 N 178 | S 700 -90 665 -110 1 1 0 N 179 | S 700 110 665 90 1 1 0 N 180 | S 700 210 665 190 1 1 0 N 181 | S 700 310 665 290 1 1 0 N 182 | S 700 510 665 490 1 1 0 N 183 | S 700 610 665 590 1 1 0 N 184 | S 700 810 665 790 1 1 0 N 185 | S 700 910 665 890 1 1 0 N 186 | X 3V3 1 100 1300 100 D 50 50 1 1 W 187 | X GPIO15/RXD 10 -800 800 100 R 50 50 1 1 B 188 | X GPIO17 11 -800 500 100 R 50 50 1 1 B 189 | X GPIO18/PWM0 12 -800 400 100 R 50 50 1 1 B 190 | X GPIO27 13 -800 -700 100 R 50 50 1 1 B 191 | X GND 14 -200 -1300 100 U 50 50 1 1 W 192 | X GPIO22 15 -800 -200 100 R 50 50 1 1 B 193 | X GPIO23 16 -800 -300 100 R 50 50 1 1 B 194 | X 3V3 17 200 1300 100 D 50 50 1 1 W 195 | X GPIO24 18 -800 -400 100 R 50 50 1 1 B 196 | X MOSI0/GPIO10 19 800 -400 100 L 50 50 1 1 B 197 | X 5V 2 -200 1300 100 D 50 50 1 1 W 198 | X GND 20 -100 -1300 100 U 50 50 1 1 W 199 | X MISO0/GPIO9 21 800 -300 100 L 50 50 1 1 B 200 | X GPIO25 22 -800 -500 100 R 50 50 1 1 B 201 | X SCLK0/GPIO11 23 800 -500 100 L 50 50 1 1 B 202 | X ~CE0~/GPIO8 24 800 -200 100 L 50 50 1 1 B 203 | X GND 25 0 -1300 100 U 50 50 1 1 W 204 | X ~CE1~/GPIO7 26 800 -100 100 L 50 50 1 1 B 205 | X ID_SD/GPIO0 27 800 900 100 L 50 50 1 1 B 206 | X ID_SC/GPIO1 28 800 800 100 L 50 50 1 1 B 207 | X GCLK1/GPIO5 29 800 200 100 L 50 50 1 1 B 208 | X SDA/GPIO2 3 800 600 100 L 50 50 1 1 B 209 | X GND 30 100 -1300 100 U 50 50 1 1 W 210 | X GCLK2/GPIO6 31 800 100 100 L 50 50 1 1 B 211 | X PWM0/GPIO12 32 800 -700 100 L 50 50 1 1 B 212 | X PWM1/GPIO13 33 800 -800 100 L 50 50 1 1 B 213 | X GND 34 200 -1300 100 U 50 50 1 1 W 214 | X GPIO19/MISO1 35 -800 200 100 R 50 50 1 1 B 215 | X GPIO16 36 -800 600 100 R 50 50 1 1 B 216 | X GPIO26 37 -800 -600 100 R 50 50 1 1 B 217 | X GPIO20/MOSI1 38 -800 100 100 R 50 50 1 1 B 218 | X GND 39 300 -1300 100 U 50 50 1 1 W 219 | X 5V 4 -100 1300 100 D 50 50 1 1 W 220 | X GPIO21/SCLK1 40 -800 0 100 R 50 50 1 1 B 221 | X SCL/GPIO3 5 800 500 100 L 50 50 1 1 B 222 | X GND 6 -400 -1300 100 U 50 50 1 1 W 223 | X GCLK0/GPIO4 7 800 300 100 L 50 50 1 1 B 224 | X GPIO14/TXD 8 -800 900 100 R 50 50 1 1 B 225 | X GND 9 -300 -1300 100 U 50 50 1 1 W 226 | ENDDRAW 227 | ENDDEF 228 | # 229 | # Device_R 230 | # 231 | DEF Device_R R 0 0 N Y 1 F N 232 | F0 "R" 80 0 50 V V C CNN 233 | F1 "Device_R" 0 0 50 V V C CNN 234 | F2 "" -70 0 50 V I C CNN 235 | F3 "" 0 0 50 H I C CNN 236 | $FPLIST 237 | R_* 238 | $ENDFPLIST 239 | DRAW 240 | S -40 -100 40 100 0 1 10 N 241 | X ~ 1 0 150 50 D 50 50 1 1 P 242 | X ~ 2 0 -150 50 U 50 50 1 1 P 243 | ENDDRAW 244 | ENDDEF 245 | # 246 | # SamacSys_Parts_ACH-14.31818MHZ-EK 247 | # 248 | DEF SamacSys_Parts_ACH-14.31818MHZ-EK Y 0 30 Y Y 1 F N 249 | F0 "Y" 1550 300 50 H V L CNN 250 | F1 "SamacSys_Parts_ACH-14.31818MHZ-EK" 1550 200 50 H V L CNN 251 | F2 "ACH16000MHZEK" 1550 100 50 H I L CNN 252 | F3 "" 1550 0 50 H I L CNN 253 | F4 "Standard Clock Oscillators 14.31818MHz 5V" 1550 -100 50 H I L CNN "Description" 254 | F5 "6.39" 1550 -200 50 H I L CNN "Height" 255 | F6 "815-ACH-14.31818EK" 1550 -300 50 H I L CNN "Mouser Part Number" 256 | F7 "https://www.mouser.co.uk/ProductDetail/ABRACON/ACH-1431818MHZ-EK?qs=m%252BUhWDcpCfYHkLvwOoxiTw%3D%3D" 1550 -400 50 H I L CNN "Mouser Price/Stock" 257 | F8 "ABRACON" 1550 -500 50 H I L CNN "Manufacturer_Name" 258 | F9 "ACH-14.31818MHZ-EK" 1550 -600 50 H I L CNN "Manufacturer_Part_Number" 259 | DRAW 260 | P 5 0 1 6 200 100 1500 100 1500 -200 200 -200 200 100 N 261 | X TRI-STATE/NC 1 0 -100 200 R 50 50 0 0 P 262 | X CASE_GND 4 1700 -100 200 L 50 50 0 0 P 263 | X OUTPUT 5 1700 0 200 L 50 50 0 0 P 264 | X VDD 8 0 0 200 R 50 50 0 0 P 265 | ENDDRAW 266 | ENDDEF 267 | # 268 | #End Library 269 | -------------------------------------------------------------------------------- /ISARPiv2/ISARPiv2.pro: -------------------------------------------------------------------------------- 1 | update=16.9.2021 10.20.06 2 | version=1 3 | last_client=kicad 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [cvpcb] 9 | version=1 10 | NetIExt=net 11 | [eeschema] 12 | version=1 13 | LibDir= 14 | [eeschema/libraries] 15 | [schematic_editor] 16 | version=1 17 | PageLayoutDescrFile= 18 | PlotDirectoryName= 19 | SubpartIdSeparator=0 20 | SubpartFirstId=65 21 | NetFmtName= 22 | SpiceAjustPassiveValues=0 23 | LabSize=25 24 | ERC_TestSimilarLabels=1 25 | [pcbnew] 26 | version=1 27 | PageLayoutDescrFile= 28 | LastNetListRead= 29 | CopperLayerCount=2 30 | BoardThickness=1.6 31 | AllowMicroVias=0 32 | AllowBlindVias=0 33 | RequireCourtyardDefinitions=0 34 | ProhibitOverlappingCourtyards=1 35 | MinTrackWidth=0.2 36 | MinViaDiameter=0.4 37 | MinViaDrill=0.3 38 | MinMicroViaDiameter=0.2 39 | MinMicroViaDrill=0.09999999999999999 40 | MinHoleToHole=0.25 41 | TrackWidth1=0.25 42 | TrackWidth2=0.3 43 | TrackWidth3=0.4 44 | TrackWidth4=0.5 45 | TrackWidth5=1 46 | ViaDiameter1=0.8 47 | ViaDrill1=0.4 48 | dPairWidth1=0.2 49 | dPairGap1=0.25 50 | dPairViaGap1=0.25 51 | SilkLineWidth=0.12 52 | SilkTextSizeV=1 53 | SilkTextSizeH=1 54 | SilkTextSizeThickness=0.15 55 | SilkTextItalic=0 56 | SilkTextUpright=1 57 | CopperLineWidth=0.2 58 | CopperTextSizeV=1.5 59 | CopperTextSizeH=1.5 60 | CopperTextThickness=0.3 61 | CopperTextItalic=0 62 | CopperTextUpright=1 63 | EdgeCutLineWidth=0.05 64 | CourtyardLineWidth=0.05 65 | OthersLineWidth=0.15 66 | OthersTextSizeV=1 67 | OthersTextSizeH=1 68 | OthersTextSizeThickness=0.15 69 | OthersTextItalic=0 70 | OthersTextUpright=1 71 | SolderMaskClearance=0.051 72 | SolderMaskMinWidth=0.25 73 | SolderPasteClearance=0 74 | SolderPasteRatio=-0 75 | [pcbnew/Layer.F.Cu] 76 | Name=F.Cu 77 | Type=0 78 | Enabled=1 79 | [pcbnew/Layer.In1.Cu] 80 | Name=In1.Cu 81 | Type=0 82 | Enabled=0 83 | [pcbnew/Layer.In2.Cu] 84 | Name=In2.Cu 85 | Type=0 86 | Enabled=0 87 | [pcbnew/Layer.In3.Cu] 88 | Name=In3.Cu 89 | Type=0 90 | Enabled=0 91 | [pcbnew/Layer.In4.Cu] 92 | Name=In4.Cu 93 | Type=0 94 | Enabled=0 95 | [pcbnew/Layer.In5.Cu] 96 | Name=In5.Cu 97 | Type=0 98 | Enabled=0 99 | [pcbnew/Layer.In6.Cu] 100 | Name=In6.Cu 101 | Type=0 102 | Enabled=0 103 | [pcbnew/Layer.In7.Cu] 104 | Name=In7.Cu 105 | Type=0 106 | Enabled=0 107 | [pcbnew/Layer.In8.Cu] 108 | Name=In8.Cu 109 | Type=0 110 | Enabled=0 111 | [pcbnew/Layer.In9.Cu] 112 | Name=In9.Cu 113 | Type=0 114 | Enabled=0 115 | [pcbnew/Layer.In10.Cu] 116 | Name=In10.Cu 117 | Type=0 118 | Enabled=0 119 | [pcbnew/Layer.In11.Cu] 120 | Name=In11.Cu 121 | Type=0 122 | Enabled=0 123 | [pcbnew/Layer.In12.Cu] 124 | Name=In12.Cu 125 | Type=0 126 | Enabled=0 127 | [pcbnew/Layer.In13.Cu] 128 | Name=In13.Cu 129 | Type=0 130 | Enabled=0 131 | [pcbnew/Layer.In14.Cu] 132 | Name=In14.Cu 133 | Type=0 134 | Enabled=0 135 | [pcbnew/Layer.In15.Cu] 136 | Name=In15.Cu 137 | Type=0 138 | Enabled=0 139 | [pcbnew/Layer.In16.Cu] 140 | Name=In16.Cu 141 | Type=0 142 | Enabled=0 143 | [pcbnew/Layer.In17.Cu] 144 | Name=In17.Cu 145 | Type=0 146 | Enabled=0 147 | [pcbnew/Layer.In18.Cu] 148 | Name=In18.Cu 149 | Type=0 150 | Enabled=0 151 | [pcbnew/Layer.In19.Cu] 152 | Name=In19.Cu 153 | Type=0 154 | Enabled=0 155 | [pcbnew/Layer.In20.Cu] 156 | Name=In20.Cu 157 | Type=0 158 | Enabled=0 159 | [pcbnew/Layer.In21.Cu] 160 | Name=In21.Cu 161 | Type=0 162 | Enabled=0 163 | [pcbnew/Layer.In22.Cu] 164 | Name=In22.Cu 165 | Type=0 166 | Enabled=0 167 | [pcbnew/Layer.In23.Cu] 168 | Name=In23.Cu 169 | Type=0 170 | Enabled=0 171 | [pcbnew/Layer.In24.Cu] 172 | Name=In24.Cu 173 | Type=0 174 | Enabled=0 175 | [pcbnew/Layer.In25.Cu] 176 | Name=In25.Cu 177 | Type=0 178 | Enabled=0 179 | [pcbnew/Layer.In26.Cu] 180 | Name=In26.Cu 181 | Type=0 182 | Enabled=0 183 | [pcbnew/Layer.In27.Cu] 184 | Name=In27.Cu 185 | Type=0 186 | Enabled=0 187 | [pcbnew/Layer.In28.Cu] 188 | Name=In28.Cu 189 | Type=0 190 | Enabled=0 191 | [pcbnew/Layer.In29.Cu] 192 | Name=In29.Cu 193 | Type=0 194 | Enabled=0 195 | [pcbnew/Layer.In30.Cu] 196 | Name=In30.Cu 197 | Type=0 198 | Enabled=0 199 | [pcbnew/Layer.B.Cu] 200 | Name=B.Cu 201 | Type=0 202 | Enabled=1 203 | [pcbnew/Layer.B.Adhes] 204 | Enabled=1 205 | [pcbnew/Layer.F.Adhes] 206 | Enabled=1 207 | [pcbnew/Layer.B.Paste] 208 | Enabled=1 209 | [pcbnew/Layer.F.Paste] 210 | Enabled=1 211 | [pcbnew/Layer.B.SilkS] 212 | Enabled=1 213 | [pcbnew/Layer.F.SilkS] 214 | Enabled=1 215 | [pcbnew/Layer.B.Mask] 216 | Enabled=1 217 | [pcbnew/Layer.F.Mask] 218 | Enabled=1 219 | [pcbnew/Layer.Dwgs.User] 220 | Enabled=1 221 | [pcbnew/Layer.Cmts.User] 222 | Enabled=1 223 | [pcbnew/Layer.Eco1.User] 224 | Enabled=1 225 | [pcbnew/Layer.Eco2.User] 226 | Enabled=1 227 | [pcbnew/Layer.Edge.Cuts] 228 | Enabled=1 229 | [pcbnew/Layer.Margin] 230 | Enabled=1 231 | [pcbnew/Layer.B.CrtYd] 232 | Enabled=1 233 | [pcbnew/Layer.F.CrtYd] 234 | Enabled=1 235 | [pcbnew/Layer.B.Fab] 236 | Enabled=1 237 | [pcbnew/Layer.F.Fab] 238 | Enabled=1 239 | [pcbnew/Layer.Rescue] 240 | Enabled=0 241 | [pcbnew/Netclasses] 242 | [pcbnew/Netclasses/Default] 243 | Name=Default 244 | Clearance=0.2 245 | TrackWidth=0.25 246 | ViaDiameter=0.8 247 | ViaDrill=0.4 248 | uViaDiameter=0.3 249 | uViaDrill=0.1 250 | dPairWidth=0.2 251 | dPairGap=0.25 252 | dPairViaGap=0.25 253 | -------------------------------------------------------------------------------- /ISARPiv2/ISARPiv2.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 30 0 3 | EELAYER END 4 | $Descr A4 11693 8268 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "" 8 | Date "" 9 | Rev "" 10 | Comp "" 11 | Comment1 "" 12 | Comment2 "" 13 | Comment3 "" 14 | Comment4 "" 15 | $EndDescr 16 | $Comp 17 | L Connector:Bus_ISA_8bit J1 18 | U 1 1 60405B30 19 | P 1600 2475 20 | F 0 "J1" H 1600 4242 50 0000 C CNN 21 | F 1 "Bus_ISA_8bit" H 1600 4151 50 0000 C CNN 22 | F 2 "adlib:BUS_PC" H 1600 2475 50 0001 C CNN 23 | F 3 "https://en.wikipedia.org/wiki/Industry_Standard_Architecture" H 1600 2475 50 0001 C CNN 24 | 1 1600 2475 25 | 1 0 0 -1 26 | $EndComp 27 | Text GLabel 2300 3075 2 50 Input ~ 0 28 | A9 29 | Text GLabel 2300 3175 2 50 Input ~ 0 30 | A8 31 | Text GLabel 2300 3275 2 50 Input ~ 0 32 | A7 33 | Text GLabel 2300 3375 2 50 Input ~ 0 34 | A6 35 | Text GLabel 2300 3475 2 50 Input ~ 0 36 | A5 37 | Text GLabel 2300 3575 2 50 Input ~ 0 38 | A4 39 | Text GLabel 2300 3675 2 50 Input ~ 0 40 | A3 41 | Text GLabel 2300 3775 2 50 Input ~ 0 42 | A2 43 | Text GLabel 2300 3875 2 50 Input ~ 0 44 | A1 45 | Text GLabel 2300 3975 2 50 Input ~ 0 46 | A0 47 | Text GLabel 900 1175 0 50 UnSpc ~ 0 48 | VCC 49 | Text GLabel 900 2175 0 50 Input ~ 0 50 | IOW 51 | Text GLabel 900 2275 0 50 Input ~ 0 52 | IOR 53 | $Comp 54 | L Connector:Raspberry_Pi_2_3 J2 55 | U 1 1 60DDB778 56 | P 4325 2450 57 | F 0 "J2" H 4325 4100 50 0000 C CNN 58 | F 1 "Raspberry_Pi_2_3" H 4325 4025 50 0000 C CNN 59 | F 2 "Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_Vertical" H 4325 2450 50 0001 C CNN 60 | F 3 "https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_3bplus_1p0_reduced.pdf" H 4325 2450 50 0001 C CNN 61 | 1 4325 2450 62 | 1 0 0 -1 63 | $EndComp 64 | Text GLabel 3925 3750 3 50 UnSpc ~ 0 65 | GND 66 | Text GLabel 3525 2450 0 50 Output ~ 0 67 | A0 68 | Text GLabel 3525 2350 0 50 Output ~ 0 69 | A1 70 | Text GLabel 3525 1850 0 50 Output ~ 0 71 | A3 72 | Text GLabel 3525 2250 0 50 Output ~ 0 73 | A4 74 | Text GLabel 5125 3250 2 50 Output ~ 0 75 | A5 76 | Text GLabel 5125 3150 2 50 Output ~ 0 77 | A6 78 | Text GLabel 5125 2350 2 50 Output ~ 0 79 | A7 80 | Text GLabel 5125 2250 2 50 Output ~ 0 81 | A8 82 | Text GLabel 5125 1650 2 50 Output ~ 0 83 | A9 84 | Text GLabel 2300 1775 2 50 BiDi ~ 0 85 | D0 86 | Text GLabel 2300 1675 2 50 BiDi ~ 0 87 | D1 88 | Text GLabel 2300 1575 2 50 BiDi ~ 0 89 | D2 90 | Text GLabel 2300 1475 2 50 BiDi ~ 0 91 | D3 92 | Text GLabel 2300 1375 2 50 BiDi ~ 0 93 | D4 94 | Text GLabel 2300 1275 2 50 BiDi ~ 0 95 | D5 96 | Text GLabel 2300 1175 2 50 BiDi ~ 0 97 | D6 98 | Text GLabel 2300 1075 2 50 BiDi ~ 0 99 | D7 100 | Text GLabel 4025 3750 3 50 UnSpc ~ 0 101 | GND 102 | Text GLabel 4125 3750 3 50 UnSpc ~ 0 103 | GND 104 | Text GLabel 4225 3750 3 50 UnSpc ~ 0 105 | GND 106 | Text GLabel 4325 3750 3 50 UnSpc ~ 0 107 | GND 108 | Text GLabel 4425 3750 3 50 UnSpc ~ 0 109 | GND 110 | Text GLabel 4525 3750 3 50 UnSpc ~ 0 111 | GND 112 | Text GLabel 4625 3750 3 50 UnSpc ~ 0 113 | GND 114 | Text GLabel 900 975 0 50 UnSpc ~ 0 115 | GND 116 | Text GLabel 4125 1150 1 50 UnSpc ~ 0 117 | VCC 118 | Text GLabel 4225 1150 1 50 UnSpc ~ 0 119 | VCC 120 | Text GLabel 900 1875 0 50 UnSpc ~ 0 121 | GND 122 | Text GLabel 900 3775 0 50 UnSpc ~ 0 123 | VCC 124 | Text GLabel 900 3975 0 50 UnSpc ~ 0 125 | GND 126 | Text GLabel 7850 1825 0 50 BiDi ~ 0 127 | D0 128 | $Comp 129 | L Device:R R10 130 | U 1 1 60DEBC37 131 | P 8000 1825 132 | F 0 "R10" V 7900 1825 50 0000 C CNN 133 | F 1 "100" V 8000 1825 50 0000 C CNN 134 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 1825 50 0001 C CNN 135 | F 3 "~" H 8000 1825 50 0001 C CNN 136 | 1 8000 1825 137 | 0 1 1 0 138 | $EndComp 139 | Text GLabel 8150 1825 2 50 BiDi ~ 0 140 | RD0 141 | $Comp 142 | L Device:R R11 143 | U 1 1 60DEC098 144 | P 8000 2025 145 | F 0 "R11" V 7900 2025 50 0000 C CNN 146 | F 1 "100" V 8000 2025 50 0000 C CNN 147 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 2025 50 0001 C CNN 148 | F 3 "~" H 8000 2025 50 0001 C CNN 149 | 1 8000 2025 150 | 0 1 1 0 151 | $EndComp 152 | $Comp 153 | L Device:R R12 154 | U 1 1 60DEC2EC 155 | P 8000 2225 156 | F 0 "R12" V 7900 2225 50 0000 C CNN 157 | F 1 "100" V 8000 2225 50 0000 C CNN 158 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 2225 50 0001 C CNN 159 | F 3 "~" H 8000 2225 50 0001 C CNN 160 | 1 8000 2225 161 | 0 1 1 0 162 | $EndComp 163 | $Comp 164 | L Device:R R13 165 | U 1 1 60DEC4FC 166 | P 8000 2425 167 | F 0 "R13" V 7900 2425 50 0000 C CNN 168 | F 1 "100" V 8000 2425 50 0000 C CNN 169 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 2425 50 0001 C CNN 170 | F 3 "~" H 8000 2425 50 0001 C CNN 171 | 1 8000 2425 172 | 0 1 1 0 173 | $EndComp 174 | $Comp 175 | L Device:R R14 176 | U 1 1 60DEC726 177 | P 8000 2625 178 | F 0 "R14" V 7900 2625 50 0000 C CNN 179 | F 1 "100" V 8000 2625 50 0000 C CNN 180 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 2625 50 0001 C CNN 181 | F 3 "~" H 8000 2625 50 0001 C CNN 182 | 1 8000 2625 183 | 0 1 1 0 184 | $EndComp 185 | $Comp 186 | L Device:R R15 187 | U 1 1 60DEC995 188 | P 8000 2825 189 | F 0 "R15" V 7900 2825 50 0000 C CNN 190 | F 1 "100" V 8000 2825 50 0000 C CNN 191 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 2825 50 0001 C CNN 192 | F 3 "~" H 8000 2825 50 0001 C CNN 193 | 1 8000 2825 194 | 0 1 1 0 195 | $EndComp 196 | $Comp 197 | L Device:R R16 198 | U 1 1 60DECBF3 199 | P 8000 3025 200 | F 0 "R16" V 7900 3025 50 0000 C CNN 201 | F 1 "100" V 8000 3025 50 0000 C CNN 202 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 3025 50 0001 C CNN 203 | F 3 "~" H 8000 3025 50 0001 C CNN 204 | 1 8000 3025 205 | 0 1 1 0 206 | $EndComp 207 | $Comp 208 | L Device:R R17 209 | U 1 1 60DECEDA 210 | P 8000 3225 211 | F 0 "R17" V 7900 3225 50 0000 C CNN 212 | F 1 "100" V 8000 3225 50 0000 C CNN 213 | F 2 "Resistor_SMD:R_0603_1608Metric" V 7930 3225 50 0001 C CNN 214 | F 3 "~" H 8000 3225 50 0001 C CNN 215 | 1 8000 3225 216 | 0 1 1 0 217 | $EndComp 218 | Text GLabel 7850 2025 0 50 BiDi ~ 0 219 | D1 220 | Text GLabel 7850 2225 0 50 BiDi ~ 0 221 | D2 222 | Text GLabel 7850 2425 0 50 BiDi ~ 0 223 | D3 224 | Text GLabel 7850 2625 0 50 BiDi ~ 0 225 | D4 226 | Text GLabel 7850 2825 0 50 BiDi ~ 0 227 | D5 228 | Text GLabel 7850 3025 0 50 BiDi ~ 0 229 | D6 230 | Text GLabel 7850 3225 0 50 BiDi ~ 0 231 | D7 232 | Text GLabel 8150 2025 2 50 BiDi ~ 0 233 | RD1 234 | Text GLabel 8150 2225 2 50 BiDi ~ 0 235 | RD2 236 | Text GLabel 8150 2425 2 50 BiDi ~ 0 237 | RD3 238 | Text GLabel 8150 2625 2 50 BiDi ~ 0 239 | RD4 240 | Text GLabel 8150 2825 2 50 BiDi ~ 0 241 | RD5 242 | Text GLabel 8150 3025 2 50 BiDi ~ 0 243 | RD6 244 | Text GLabel 8150 3225 2 50 BiDi ~ 0 245 | RD7 246 | Text GLabel 3525 3150 0 50 BiDi ~ 0 247 | RD0 248 | Text GLabel 3525 2050 0 50 BiDi ~ 0 249 | RD1 250 | Text GLabel 3525 1950 0 50 BiDi ~ 0 251 | RD2 252 | Text GLabel 3525 1650 0 50 BiDi ~ 0 253 | RD3 254 | Text GLabel 3525 1550 0 50 BiDi ~ 0 255 | RD4 256 | Text GLabel 5125 2150 2 50 BiDi ~ 0 257 | RD5 258 | Text GLabel 5125 1950 2 50 BiDi ~ 0 259 | RD6 260 | Text GLabel 5125 1850 2 50 BiDi ~ 0 261 | RD7 262 | Text GLabel 3525 2950 0 50 Output ~ 0 263 | IOW 264 | Text GLabel 5125 2950 2 50 Output ~ 0 265 | IOR 266 | Text GLabel 900 1075 0 50 Input ~ 0 267 | RESET 268 | Text GLabel 3525 2650 0 50 Output ~ 0 269 | RESET 270 | Text GLabel 2300 1975 2 50 UnSpc ~ 0 271 | GND 272 | $Comp 273 | L SamacSys_Parts:ACH-14.31818MHZ-EK Y1 274 | U 1 1 6142166C 275 | P 4700 4850 276 | F 0 "Y1" H 5550 5115 50 0000 C CNN 277 | F 1 "ACH-14.31818MHZ-EK" H 5550 5024 50 0000 C CNN 278 | F 2 "SamacSys_Parts:ACH16000MHZEK" H 6250 4950 50 0001 L CNN 279 | F 3 "" H 6250 4850 50 0001 L CNN 280 | F 4 "Standard Clock Oscillators 14.31818MHz 5V" H 6250 4750 50 0001 L CNN "Description" 281 | F 5 "6.39" H 6250 4650 50 0001 L CNN "Height" 282 | F 6 "815-ACH-14.31818EK" H 6250 4550 50 0001 L CNN "Mouser Part Number" 283 | F 7 "https://www.mouser.co.uk/ProductDetail/ABRACON/ACH-1431818MHZ-EK?qs=m%252BUhWDcpCfYHkLvwOoxiTw%3D%3D" H 6250 4450 50 0001 L CNN "Mouser Price/Stock" 284 | F 8 "ABRACON" H 6250 4350 50 0001 L CNN "Manufacturer_Name" 285 | F 9 "ACH-14.31818MHZ-EK" H 6250 4250 50 0001 L CNN "Manufacturer_Part_Number" 286 | 1 4700 4850 287 | 1 0 0 -1 288 | $EndComp 289 | Text GLabel 4700 4850 0 50 UnSpc ~ 0 290 | VCC 291 | Text GLabel 6400 4950 2 50 UnSpc ~ 0 292 | GND 293 | Text GLabel 6400 4850 2 50 Output ~ 0 294 | OSC 295 | Text GLabel 900 3875 0 50 Input ~ 0 296 | OSC 297 | Text GLabel 900 1975 0 50 Input ~ 0 298 | MEMW 299 | Text GLabel 900 2075 0 50 Input ~ 0 300 | MEMR 301 | Text GLabel 2300 2975 2 50 Input ~ 0 302 | A10 303 | Text GLabel 2300 2875 2 50 Input ~ 0 304 | A11 305 | Text GLabel 2300 2775 2 50 Input ~ 0 306 | A12 307 | Text GLabel 2300 2675 2 50 Input ~ 0 308 | A13 309 | Text GLabel 2300 2575 2 50 Input ~ 0 310 | A14 311 | Text GLabel 2300 2475 2 50 Input ~ 0 312 | A15 313 | Text GLabel 2300 2375 2 50 Input ~ 0 314 | A16 315 | Text GLabel 2300 2275 2 50 Input ~ 0 316 | A17 317 | Text GLabel 2300 2175 2 50 Input ~ 0 318 | A18 319 | Text GLabel 2300 2075 2 50 Input ~ 0 320 | A19 321 | $Comp 322 | L Connector_Generic:Conn_02x10_Counter_Clockwise J3 323 | U 1 1 61421B75 324 | P 6500 2550 325 | F 0 "J3" H 6550 3167 50 0000 C CNN 326 | F 1 "Conn_02x10_Counter_Clockwise" H 6550 3076 50 0000 C CNN 327 | F 2 "Package_DIP:DIP-20_W7.62mm_Socket" H 6500 2550 50 0001 C CNN 328 | F 3 "~" H 6500 2550 50 0001 C CNN 329 | 1 6500 2550 330 | 1 0 0 -1 331 | $EndComp 332 | Text GLabel 6300 2150 0 50 UnSpc ~ 0 333 | GND 334 | Text GLabel 6300 2250 0 50 Input ~ 0 335 | A0 336 | Text GLabel 6300 2350 0 50 Input ~ 0 337 | A1 338 | Text GLabel 6300 2450 0 50 Input ~ 0 339 | A2 340 | Text GLabel 6300 2550 0 50 Input ~ 0 341 | A3 342 | Text GLabel 6300 2650 0 50 Input ~ 0 343 | A4 344 | Text GLabel 6300 2750 0 50 Input ~ 0 345 | A5 346 | Text GLabel 6300 2850 0 50 Input ~ 0 347 | A6 348 | Text GLabel 6300 2950 0 50 Input ~ 0 349 | A7 350 | Text GLabel 6800 2250 2 50 Output ~ 0 351 | A12 352 | Text GLabel 6800 2350 2 50 Output ~ 0 353 | A13 354 | Text GLabel 6800 2750 2 50 Output ~ 0 355 | A17 356 | Text GLabel 6800 2650 2 50 Output ~ 0 357 | A16 358 | Text GLabel 6800 2550 2 50 Output ~ 0 359 | A15 360 | Text GLabel 6800 2450 2 50 Output ~ 0 361 | A14 362 | Text GLabel 6300 3050 0 50 UnSpc ~ 0 363 | GND 364 | Text GLabel 6800 2150 2 50 UnSpc ~ 0 365 | VCC 366 | Text GLabel 3525 2750 0 50 Output ~ 0 367 | LA 368 | Text GLabel 6800 3050 2 50 Input ~ 0 369 | LA 370 | Text GLabel 5125 1550 2 50 Output ~ 0 371 | A10 372 | Text GLabel 5125 2550 2 50 Output ~ 0 373 | A11 374 | Text GLabel 6800 2850 2 50 Output ~ 0 375 | A18 376 | Text GLabel 6800 2950 2 50 Output ~ 0 377 | A19 378 | Text GLabel 5125 2750 2 50 Output ~ 0 379 | MEMR 380 | Text GLabel 5125 2850 2 50 Output ~ 0 381 | MEMW 382 | Text GLabel 3525 3050 0 50 Output ~ 0 383 | A2 384 | $EndSCHEMATC 385 | -------------------------------------------------------------------------------- /MEMv1/ISAMEM-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Connector_Bus_ISA_8bit 5 | # 6 | DEF Connector_Bus_ISA_8bit J 0 20 Y Y 1 F N 7 | F0 "J" 0 1675 50 H V C CNN 8 | F1 "Connector_Bus_ISA_8bit" 0 -1675 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | DRAW 12 | S -600 -1600 600 1600 0 1 10 f 13 | X GND 1 -700 1500 100 R 50 50 1 1 W 14 | X GND 10 -700 600 100 R 50 50 1 1 W 15 | X ~SMEMW 11 -700 500 100 R 50 50 1 1 O 16 | X ~SMEMR 12 -700 400 100 R 50 50 1 1 O 17 | X ~IOW 13 -700 300 100 R 50 50 1 1 O 18 | X ~IOR 14 -700 200 100 R 50 50 1 1 O 19 | X ~DACK3 15 -700 100 100 R 50 50 1 1 P 20 | X DRQ3 16 -700 0 100 R 50 50 1 1 P 21 | X ~DACK1 17 -700 -100 100 R 50 50 1 1 P 22 | X DRQ1 18 -700 -200 100 R 50 50 1 1 P 23 | X ~DACK0 19 -700 -300 100 R 50 50 1 1 P 24 | X RESET 2 -700 1400 100 R 50 50 1 1 O 25 | X CLK 20 -700 -400 100 R 50 50 1 1 O 26 | X IRQ7 21 -700 -500 100 R 50 50 1 1 P 27 | X IRQ6 22 -700 -600 100 R 50 50 1 1 P 28 | X IRQ5 23 -700 -700 100 R 50 50 1 1 P 29 | X IRQ4 24 -700 -800 100 R 50 50 1 1 P 30 | X IRQ3 25 -700 -900 100 R 50 50 1 1 P 31 | X ~DACK2 26 -700 -1000 100 R 50 50 1 1 P 32 | X TC 27 -700 -1100 100 R 50 50 1 1 P 33 | X ALE 28 -700 -1200 100 R 50 50 1 1 O 34 | X VCC 29 -700 -1300 100 R 50 50 1 1 W 35 | X VCC 3 -700 1300 100 R 50 50 1 1 W 36 | X OSC 30 -700 -1400 100 R 50 50 1 1 O 37 | X GND 31 -700 -1500 100 R 50 50 1 1 W 38 | X IO 32 700 1500 100 L 50 50 1 1 P 39 | X DB7 33 700 1400 100 L 50 50 1 1 T 40 | X DB6 34 700 1300 100 L 50 50 1 1 T 41 | X DB5 35 700 1200 100 L 50 50 1 1 T 42 | X DB4 36 700 1100 100 L 50 50 1 1 T 43 | X DB3 37 700 1000 100 L 50 50 1 1 T 44 | X DB2 38 700 900 100 L 50 50 1 1 T 45 | X DB1 39 700 800 100 L 50 50 1 1 T 46 | X INQ2 4 -700 1200 100 R 50 50 1 1 P 47 | X DB0 40 700 700 100 L 50 50 1 1 T 48 | X IO_READY 41 700 600 100 L 50 50 1 1 P 49 | X AEN 42 700 500 100 L 50 50 1 1 O 50 | X BA19 43 700 400 100 L 50 50 1 1 T 51 | X BA18 44 700 300 100 L 50 50 1 1 T 52 | X BA17 45 700 200 100 L 50 50 1 1 T 53 | X BA16 46 700 100 100 L 50 50 1 1 T 54 | X BA15 47 700 0 100 L 50 50 1 1 T 55 | X BA14 48 700 -100 100 L 50 50 1 1 T 56 | X BA13 49 700 -200 100 L 50 50 1 1 T 57 | X -5V 5 -700 1100 100 R 50 50 1 1 W 58 | X BA12 50 700 -300 100 L 50 50 1 1 T 59 | X BA11 51 700 -400 100 L 50 50 1 1 T 60 | X BA10 52 700 -500 100 L 50 50 1 1 T 61 | X BA09 53 700 -600 100 L 50 50 1 1 T 62 | X BA08 54 700 -700 100 L 50 50 1 1 T 63 | X BA07 55 700 -800 100 L 50 50 1 1 T 64 | X BA06 56 700 -900 100 L 50 50 1 1 T 65 | X BA05 57 700 -1000 100 L 50 50 1 1 T 66 | X BA04 58 700 -1100 100 L 50 50 1 1 T 67 | X BA03 59 700 -1200 100 L 50 50 1 1 T 68 | X DRQ2 6 -700 1000 100 R 50 50 1 1 P 69 | X BA02 60 700 -1300 100 L 50 50 1 1 T 70 | X BA01 61 700 -1400 100 L 50 50 1 1 T 71 | X BA00 62 700 -1500 100 L 50 50 1 1 T 72 | X -12V 7 -700 900 100 R 50 50 1 1 W 73 | X UNUSED 8 -700 800 100 R 50 50 1 1 P 74 | X +12V 9 -700 700 100 R 50 50 1 1 W 75 | ENDDRAW 76 | ENDDEF 77 | # 78 | # Device_C 79 | # 80 | DEF Device_C C 0 10 N Y 1 F N 81 | F0 "C" 25 100 50 H V L CNN 82 | F1 "Device_C" 25 -100 50 H V L CNN 83 | F2 "" 38 -150 50 H I C CNN 84 | F3 "" 0 0 50 H I C CNN 85 | $FPLIST 86 | C_* 87 | $ENDFPLIST 88 | DRAW 89 | P 2 0 1 20 -80 -30 80 -30 N 90 | P 2 0 1 20 -80 30 80 30 N 91 | X ~ 1 0 150 110 D 50 50 1 1 P 92 | X ~ 2 0 -150 110 U 50 50 1 1 P 93 | ENDDRAW 94 | ENDDEF 95 | # 96 | # SamacSys_Parts_AS6C4008-55PCN 97 | # 98 | DEF SamacSys_Parts_AS6C4008-55PCN IC 0 30 Y Y 1 F N 99 | F0 "IC" 850 300 50 H V L CNN 100 | F1 "SamacSys_Parts_AS6C4008-55PCN" 850 200 50 H V L CNN 101 | F2 "DIP1524W58P254L4191H406Q32N" 850 100 50 H I L CNN 102 | F3 "http://componentsearchengine.com/Datasheets/1/AS6C4008-55PCN.pdf" 850 0 50 H I L CNN 103 | F4 "CMOS SRAM" 850 -100 50 H I L CNN "Description" 104 | F5 "4.064" 850 -200 50 H I L CNN "Height" 105 | F6 "913-AS6C4008-55PCN" 850 -300 50 H I L CNN "Mouser Part Number" 106 | F7 "https://www.mouser.co.uk/ProductDetail/Alliance-Memory/AS6C4008-55PCN/?qs=E5c5%252Bmu3i3%252BMOyro1Tlhzg%3D%3D" 850 -400 50 H I L CNN "Mouser Price/Stock" 107 | F8 "Alliance Memory" 850 -500 50 H I L CNN "Manufacturer_Name" 108 | F9 "AS6C4008-55PCN" 850 -600 50 H I L CNN "Manufacturer_Part_Number" 109 | DRAW 110 | P 5 0 1 6 200 100 800 100 800 -1600 200 -1600 200 100 N 111 | X A18 1 0 0 200 R 50 50 0 0 P 112 | X A2 10 0 -900 200 R 50 50 0 0 P 113 | X A1 11 0 -1000 200 R 50 50 0 0 P 114 | X A0 12 0 -1100 200 R 50 50 0 0 P 115 | X DQ0 13 0 -1200 200 R 50 50 0 0 P 116 | X DQ1 14 0 -1300 200 R 50 50 0 0 P 117 | X DQ2 15 0 -1400 200 R 50 50 0 0 P 118 | X VSS 16 0 -1500 200 R 50 50 0 0 P 119 | X DQ3 17 1000 -1500 200 L 50 50 0 0 P 120 | X DQ4 18 1000 -1400 200 L 50 50 0 0 P 121 | X DQ5 19 1000 -1300 200 L 50 50 0 0 P 122 | X A16 2 0 -100 200 R 50 50 0 0 P 123 | X DQ6 20 1000 -1200 200 L 50 50 0 0 P 124 | X DQ7 21 1000 -1100 200 L 50 50 0 0 P 125 | X CE# 22 1000 -1000 200 L 50 50 0 0 P 126 | X A10 23 1000 -900 200 L 50 50 0 0 P 127 | X OE# 24 1000 -800 200 L 50 50 0 0 P 128 | X A11 25 1000 -700 200 L 50 50 0 0 P 129 | X A9 26 1000 -600 200 L 50 50 0 0 P 130 | X A8 27 1000 -500 200 L 50 50 0 0 P 131 | X A13 28 1000 -400 200 L 50 50 0 0 P 132 | X WE# 29 1000 -300 200 L 50 50 0 0 P 133 | X A14 3 0 -200 200 R 50 50 0 0 P 134 | X A17 30 1000 -200 200 L 50 50 0 0 P 135 | X A15 31 1000 -100 200 L 50 50 0 0 P 136 | X VCC 32 1000 0 200 L 50 50 0 0 P 137 | X A12 4 0 -300 200 R 50 50 0 0 P 138 | X A7 5 0 -400 200 R 50 50 0 0 P 139 | X A6 6 0 -500 200 R 50 50 0 0 P 140 | X A5 7 0 -600 200 R 50 50 0 0 P 141 | X A4 8 0 -700 200 R 50 50 0 0 P 142 | X A3 9 0 -800 200 R 50 50 0 0 P 143 | ENDDRAW 144 | ENDDEF 145 | # 146 | #End Library 147 | -------------------------------------------------------------------------------- /MEMv1/ISAMEM.kicad_pcb: -------------------------------------------------------------------------------- 1 | (kicad_pcb (version 20171130) (host pcbnew "(5.1.5)-3") 2 | 3 | (general 4 | (thickness 1.6) 5 | (drawings 7) 6 | (tracks 224) 7 | (zones 0) 8 | (modules 3) 9 | (nets 33) 10 | ) 11 | 12 | (page A4) 13 | (layers 14 | (0 F.Cu signal) 15 | (31 B.Cu signal) 16 | (32 B.Adhes user) 17 | (33 F.Adhes user) 18 | (34 B.Paste user) 19 | (35 F.Paste user) 20 | (36 B.SilkS user) 21 | (37 F.SilkS user) 22 | (38 B.Mask user) 23 | (39 F.Mask user) 24 | (40 Dwgs.User user) 25 | (41 Cmts.User user) 26 | (42 Eco1.User user) 27 | (43 Eco2.User user) 28 | (44 Edge.Cuts user) 29 | (45 Margin user) 30 | (46 B.CrtYd user) 31 | (47 F.CrtYd user) 32 | (48 B.Fab user) 33 | (49 F.Fab user) 34 | ) 35 | 36 | (setup 37 | (last_trace_width 1) 38 | (user_trace_width 1) 39 | (trace_clearance 0.2) 40 | (zone_clearance 0.508) 41 | (zone_45_only no) 42 | (trace_min 0.2) 43 | (via_size 0.8) 44 | (via_drill 0.4) 45 | (via_min_size 0.4) 46 | (via_min_drill 0.3) 47 | (uvia_size 0.3) 48 | (uvia_drill 0.1) 49 | (uvias_allowed no) 50 | (uvia_min_size 0.2) 51 | (uvia_min_drill 0.1) 52 | (edge_width 0.05) 53 | (segment_width 0.2) 54 | (pcb_text_width 0.3) 55 | (pcb_text_size 1.5 1.5) 56 | (mod_edge_width 0.12) 57 | (mod_text_size 1 1) 58 | (mod_text_width 0.15) 59 | (pad_size 1.524 1.524) 60 | (pad_drill 0.762) 61 | (pad_to_mask_clearance 0.051) 62 | (solder_mask_min_width 0.25) 63 | (aux_axis_origin 0 0) 64 | (visible_elements 7FFFFFFF) 65 | (pcbplotparams 66 | (layerselection 0x010fc_ffffffff) 67 | (usegerberextensions false) 68 | (usegerberattributes false) 69 | (usegerberadvancedattributes false) 70 | (creategerberjobfile false) 71 | (excludeedgelayer true) 72 | (linewidth 0.100000) 73 | (plotframeref false) 74 | (viasonmask false) 75 | (mode 1) 76 | (useauxorigin false) 77 | (hpglpennumber 1) 78 | (hpglpenspeed 20) 79 | (hpglpendiameter 15.000000) 80 | (psnegative false) 81 | (psa4output false) 82 | (plotreference true) 83 | (plotvalue true) 84 | (plotinvisibletext false) 85 | (padsonsilk false) 86 | (subtractmaskfromsilk false) 87 | (outputformat 1) 88 | (mirror false) 89 | (drillshape 0) 90 | (scaleselection 1) 91 | (outputdirectory "gerber/")) 92 | ) 93 | 94 | (net 0 "") 95 | (net 1 V5) 96 | (net 2 GND) 97 | (net 3 A16) 98 | (net 4 A17) 99 | (net 5 A18) 100 | (net 6 A19) 101 | (net 7 ~MEMW) 102 | (net 8 A14) 103 | (net 9 A13) 104 | (net 10 A8) 105 | (net 11 A9) 106 | (net 12 A11) 107 | (net 13 ~MEMR) 108 | (net 14 A10) 109 | (net 15 D7) 110 | (net 16 D6) 111 | (net 17 D5) 112 | (net 18 D4) 113 | (net 19 D3) 114 | (net 20 D2) 115 | (net 21 D1) 116 | (net 22 D0) 117 | (net 23 A0) 118 | (net 24 A1) 119 | (net 25 A2) 120 | (net 26 A3) 121 | (net 27 A4) 122 | (net 28 A5) 123 | (net 29 A6) 124 | (net 30 A7) 125 | (net 31 A12) 126 | (net 32 A15) 127 | 128 | (net_class Default "This is the default net class." 129 | (clearance 0.2) 130 | (trace_width 0.25) 131 | (via_dia 0.8) 132 | (via_drill 0.4) 133 | (uvia_dia 0.3) 134 | (uvia_drill 0.1) 135 | (add_net A0) 136 | (add_net A1) 137 | (add_net A10) 138 | (add_net A11) 139 | (add_net A12) 140 | (add_net A13) 141 | (add_net A14) 142 | (add_net A15) 143 | (add_net A16) 144 | (add_net A17) 145 | (add_net A18) 146 | (add_net A19) 147 | (add_net A2) 148 | (add_net A3) 149 | (add_net A4) 150 | (add_net A5) 151 | (add_net A6) 152 | (add_net A7) 153 | (add_net A8) 154 | (add_net A9) 155 | (add_net D0) 156 | (add_net D1) 157 | (add_net D2) 158 | (add_net D3) 159 | (add_net D4) 160 | (add_net D5) 161 | (add_net D6) 162 | (add_net D7) 163 | (add_net GND) 164 | (add_net "Net-(J1-Pad13)") 165 | (add_net "Net-(J1-Pad14)") 166 | (add_net "Net-(J1-Pad15)") 167 | (add_net "Net-(J1-Pad16)") 168 | (add_net "Net-(J1-Pad17)") 169 | (add_net "Net-(J1-Pad18)") 170 | (add_net "Net-(J1-Pad19)") 171 | (add_net "Net-(J1-Pad2)") 172 | (add_net "Net-(J1-Pad20)") 173 | (add_net "Net-(J1-Pad21)") 174 | (add_net "Net-(J1-Pad22)") 175 | (add_net "Net-(J1-Pad23)") 176 | (add_net "Net-(J1-Pad24)") 177 | (add_net "Net-(J1-Pad25)") 178 | (add_net "Net-(J1-Pad26)") 179 | (add_net "Net-(J1-Pad27)") 180 | (add_net "Net-(J1-Pad28)") 181 | (add_net "Net-(J1-Pad30)") 182 | (add_net "Net-(J1-Pad32)") 183 | (add_net "Net-(J1-Pad4)") 184 | (add_net "Net-(J1-Pad41)") 185 | (add_net "Net-(J1-Pad42)") 186 | (add_net "Net-(J1-Pad5)") 187 | (add_net "Net-(J1-Pad6)") 188 | (add_net "Net-(J1-Pad7)") 189 | (add_net "Net-(J1-Pad8)") 190 | (add_net "Net-(J1-Pad9)") 191 | (add_net V5) 192 | (add_net ~MEMR) 193 | (add_net ~MEMW) 194 | ) 195 | 196 | (module SamacSys_Parts:DIP1524W58P254L4191H406Q32N (layer F.Cu) (tedit 0) (tstamp 604058A6) 197 | (at 211.074 111.506 90) 198 | (descr "32 pin 600 mil P-DIP") 199 | (tags "Integrated Circuit") 200 | (path /60412523) 201 | (fp_text reference IC3 (at 0 0 90) (layer F.SilkS) 202 | (effects (font (size 1.27 1.27) (thickness 0.254))) 203 | ) 204 | (fp_text value AS6C4008-55PCN (at 0 0 90) (layer F.SilkS) hide 205 | (effects (font (size 1.27 1.27) (thickness 0.254))) 206 | ) 207 | (fp_line (start -6.985 21.018) (end 6.985 21.018) (layer F.SilkS) (width 0.2)) 208 | (fp_line (start -8.212 -21.018) (end 6.985 -21.018) (layer F.SilkS) (width 0.2)) 209 | (fp_line (start -6.985 -19.748) (end -5.715 -21.018) (layer F.Fab) (width 0.1)) 210 | (fp_line (start -6.985 21.018) (end -6.985 -21.018) (layer F.Fab) (width 0.1)) 211 | (fp_line (start 6.985 21.018) (end -6.985 21.018) (layer F.Fab) (width 0.1)) 212 | (fp_line (start 6.985 -21.018) (end 6.985 21.018) (layer F.Fab) (width 0.1)) 213 | (fp_line (start -6.985 -21.018) (end 6.985 -21.018) (layer F.Fab) (width 0.1)) 214 | (fp_line (start -8.589 21.268) (end -8.589 -21.268) (layer F.CrtYd) (width 0.05)) 215 | (fp_line (start 8.589 21.268) (end -8.589 21.268) (layer F.CrtYd) (width 0.05)) 216 | (fp_line (start 8.589 -21.268) (end 8.589 21.268) (layer F.CrtYd) (width 0.05)) 217 | (fp_line (start -8.589 -21.268) (end 8.589 -21.268) (layer F.CrtYd) (width 0.05)) 218 | (fp_text user %R (at 0 0 90) (layer F.Fab) 219 | (effects (font (size 1.27 1.27) (thickness 0.254))) 220 | ) 221 | (pad 32 thru_hole circle (at 7.62 -19.05 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 222 | (net 1 V5)) 223 | (pad 31 thru_hole circle (at 7.62 -16.51 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 224 | (net 32 A15)) 225 | (pad 30 thru_hole circle (at 7.62 -13.97 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 226 | (net 4 A17)) 227 | (pad 29 thru_hole circle (at 7.62 -11.43 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 228 | (net 7 ~MEMW)) 229 | (pad 28 thru_hole circle (at 7.62 -8.89 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 230 | (net 9 A13)) 231 | (pad 27 thru_hole circle (at 7.62 -6.35 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 232 | (net 10 A8)) 233 | (pad 26 thru_hole circle (at 7.62 -3.81 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 234 | (net 11 A9)) 235 | (pad 25 thru_hole circle (at 7.62 -1.27 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 236 | (net 12 A11)) 237 | (pad 24 thru_hole circle (at 7.62 1.27 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 238 | (net 13 ~MEMR)) 239 | (pad 23 thru_hole circle (at 7.62 3.81 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 240 | (net 14 A10)) 241 | (pad 22 thru_hole circle (at 7.62 6.35 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 242 | (net 6 A19)) 243 | (pad 21 thru_hole circle (at 7.62 8.89 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 244 | (net 15 D7)) 245 | (pad 20 thru_hole circle (at 7.62 11.43 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 246 | (net 16 D6)) 247 | (pad 19 thru_hole circle (at 7.62 13.97 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 248 | (net 17 D5)) 249 | (pad 18 thru_hole circle (at 7.62 16.51 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 250 | (net 18 D4)) 251 | (pad 17 thru_hole circle (at 7.62 19.05 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 252 | (net 19 D3)) 253 | (pad 16 thru_hole circle (at -7.62 19.05 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 254 | (net 2 GND)) 255 | (pad 15 thru_hole circle (at -7.62 16.51 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 256 | (net 20 D2)) 257 | (pad 14 thru_hole circle (at -7.62 13.97 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 258 | (net 21 D1)) 259 | (pad 13 thru_hole circle (at -7.62 11.43 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 260 | (net 22 D0)) 261 | (pad 12 thru_hole circle (at -7.62 8.89 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 262 | (net 23 A0)) 263 | (pad 11 thru_hole circle (at -7.62 6.35 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 264 | (net 24 A1)) 265 | (pad 10 thru_hole circle (at -7.62 3.81 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 266 | (net 25 A2)) 267 | (pad 9 thru_hole circle (at -7.62 1.27 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 268 | (net 26 A3)) 269 | (pad 8 thru_hole circle (at -7.62 -1.27 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 270 | (net 27 A4)) 271 | (pad 7 thru_hole circle (at -7.62 -3.81 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 272 | (net 28 A5)) 273 | (pad 6 thru_hole circle (at -7.62 -6.35 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 274 | (net 29 A6)) 275 | (pad 5 thru_hole circle (at -7.62 -8.89 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 276 | (net 30 A7)) 277 | (pad 4 thru_hole circle (at -7.62 -11.43 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 278 | (net 31 A12)) 279 | (pad 3 thru_hole circle (at -7.62 -13.97 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 280 | (net 8 A14)) 281 | (pad 2 thru_hole circle (at -7.62 -16.51 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 282 | (net 3 A16)) 283 | (pad 1 thru_hole rect (at -7.62 -19.05 90) (size 1.184 1.184) (drill 0.784) (layers *.Cu *.Mask) 284 | (net 5 A18)) 285 | (model D:\SamacSys_PCB_Library\KiCad\SamacSys_Parts.3dshapes\AS6C4008-55PCN.stp 286 | (at (xyz 0 0 0)) 287 | (scale (xyz 1 1 1)) 288 | (rotate (xyz 0 0 0)) 289 | ) 290 | ) 291 | 292 | (module Capacitor_SMD:C_0603_1608Metric (layer F.Cu) (tedit 5B301BBE) (tstamp 60DDD066) 293 | (at 226.8475 113.333907) 294 | (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator") 295 | (tags capacitor) 296 | (path /60DD8211) 297 | (attr smd) 298 | (fp_text reference C1 (at 0 -1.43) (layer F.SilkS) 299 | (effects (font (size 1 1) (thickness 0.15))) 300 | ) 301 | (fp_text value 10uF (at 0 1.43) (layer F.Fab) 302 | (effects (font (size 1 1) (thickness 0.15))) 303 | ) 304 | (fp_text user %R (at 0 0) (layer F.Fab) 305 | (effects (font (size 0.4 0.4) (thickness 0.06))) 306 | ) 307 | (fp_line (start 1.48 0.73) (end -1.48 0.73) (layer F.CrtYd) (width 0.05)) 308 | (fp_line (start 1.48 -0.73) (end 1.48 0.73) (layer F.CrtYd) (width 0.05)) 309 | (fp_line (start -1.48 -0.73) (end 1.48 -0.73) (layer F.CrtYd) (width 0.05)) 310 | (fp_line (start -1.48 0.73) (end -1.48 -0.73) (layer F.CrtYd) (width 0.05)) 311 | (fp_line (start -0.162779 0.51) (end 0.162779 0.51) (layer F.SilkS) (width 0.12)) 312 | (fp_line (start -0.162779 -0.51) (end 0.162779 -0.51) (layer F.SilkS) (width 0.12)) 313 | (fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1)) 314 | (fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1)) 315 | (fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1)) 316 | (fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1)) 317 | (pad 2 smd roundrect (at 0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) 318 | (net 2 GND)) 319 | (pad 1 smd roundrect (at -0.7875 0) (size 0.875 0.95) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) 320 | (net 1 V5)) 321 | (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl 322 | (at (xyz 0 0 0)) 323 | (scale (xyz 1 1 1)) 324 | (rotate (xyz 0 0 0)) 325 | ) 326 | ) 327 | 328 | (module adlib:BUS_PC (layer F.Cu) (tedit 6040B19F) (tstamp 604044B8) 329 | (at 208.28 134.62) 330 | (descr "Connecteur Bus AT ISA 16 bits") 331 | (tags "CONN BUS ISA") 332 | (path /60405B30) 333 | (fp_text reference J1 (at -1.27 -27.178) (layer F.SilkS) 334 | (effects (font (size 1 1) (thickness 0.15))) 335 | ) 336 | (fp_text value Bus_ISA_8bit (at -43.815 -6.985) (layer F.Fab) 337 | (effects (font (size 1 1) (thickness 0.15))) 338 | ) 339 | (fp_line (start 62.23 -3.81) (end 40.64 -3.81) (layer Dwgs.User) (width 0.1524)) 340 | (fp_line (start -39.37 3.81) (end -40.64 2.54) (layer Dwgs.User) (width 0.1524)) 341 | (fp_line (start 39.37 3.81) (end -39.37 3.81) (layer Dwgs.User) (width 0.15)) 342 | (fp_line (start -40.64 2.54) (end -40.64 -3.81) (layer Dwgs.User) (width 0.15)) 343 | (fp_line (start -40.64 -3.81) (end 40.64 -3.81) (layer Dwgs.User) (width 0.15)) 344 | (fp_line (start 40.64 -3.81) (end 40.64 2.54) (layer Dwgs.User) (width 0.15)) 345 | (fp_line (start 40.64 2.54) (end 39.37 3.81) (layer Dwgs.User) (width 0.1524)) 346 | (pad 1 connect rect (at 38.1 0.381) (size 1.524 6.858) (layers B.Cu B.Mask) 347 | (net 2 GND)) 348 | (pad 2 connect rect (at 35.56 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 349 | (pad 3 connect rect (at 33.02 0.381) (size 1.524 6.858) (layers B.Cu B.Mask) 350 | (net 1 V5)) 351 | (pad 4 connect rect (at 30.48 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 352 | (pad 5 connect rect (at 27.94 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 353 | (pad 6 connect rect (at 25.4 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 354 | (pad 7 connect rect (at 22.86 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 355 | (pad 8 connect rect (at 20.32 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 356 | (pad 9 connect rect (at 17.78 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 357 | (pad 10 connect rect (at 15.24 0.381) (size 1.524 6.858) (layers B.Cu B.Mask) 358 | (net 2 GND)) 359 | (pad 11 connect rect (at 12.7 0.381) (size 1.524 6.858) (layers B.Cu B.Mask) 360 | (net 7 ~MEMW)) 361 | (pad 12 connect rect (at 10.16 0.381) (size 1.524 6.858) (layers B.Cu B.Mask) 362 | (net 13 ~MEMR)) 363 | (pad 13 connect rect (at 7.62 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 364 | (pad 14 connect rect (at 5.08 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 365 | (pad 15 connect rect (at 2.54 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 366 | (pad 16 connect rect (at 0 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 367 | (pad 17 connect rect (at -2.54 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 368 | (pad 18 connect rect (at -5.08 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 369 | (pad 19 connect rect (at -7.62 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 370 | (pad 20 connect rect (at -10.16 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 371 | (pad 21 connect rect (at -12.7 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 372 | (pad 22 connect rect (at -15.24 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 373 | (pad 23 connect rect (at -17.78 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 374 | (pad 24 connect rect (at -20.32 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 375 | (pad 25 connect rect (at -22.86 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 376 | (pad 26 connect rect (at -25.4 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 377 | (pad 27 connect rect (at -27.94 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 378 | (pad 28 connect rect (at -30.48 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 379 | (pad 29 connect rect (at -33.02 0.381) (size 1.524 6.858) (layers B.Cu B.Mask) 380 | (net 1 V5)) 381 | (pad 30 connect rect (at -35.56 0.381) (size 1.524 6.858) (layers B.Cu B.Mask)) 382 | (pad 31 connect rect (at -38.1 0.381) (size 1.524 6.858) (layers B.Cu B.Mask) 383 | (net 2 GND)) 384 | (pad 32 connect rect (at 38.1 0.381) (size 1.524 6.858) (layers F.Cu F.Mask)) 385 | (pad 33 connect rect (at 35.56 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 386 | (net 15 D7)) 387 | (pad 34 connect rect (at 33.02 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 388 | (net 16 D6)) 389 | (pad 35 connect rect (at 30.48 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 390 | (net 17 D5)) 391 | (pad 36 connect rect (at 27.94 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 392 | (net 18 D4)) 393 | (pad 37 connect rect (at 25.4 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 394 | (net 19 D3)) 395 | (pad 38 connect rect (at 22.86 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 396 | (net 20 D2)) 397 | (pad 39 connect rect (at 20.32 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 398 | (net 21 D1)) 399 | (pad 40 connect rect (at 17.78 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 400 | (net 22 D0)) 401 | (pad 41 connect rect (at 15.24 0.381) (size 1.524 6.858) (layers F.Cu F.Mask)) 402 | (pad 42 connect rect (at 12.7 0.381) (size 1.524 6.858) (layers F.Cu F.Mask)) 403 | (pad 43 connect rect (at 10.16 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 404 | (net 6 A19)) 405 | (pad 44 connect rect (at 7.62 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 406 | (net 5 A18)) 407 | (pad 45 connect rect (at 5.08 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 408 | (net 4 A17)) 409 | (pad 46 connect rect (at 2.54 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 410 | (net 3 A16)) 411 | (pad 47 connect rect (at 0 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 412 | (net 32 A15)) 413 | (pad 48 connect rect (at -2.54 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 414 | (net 8 A14)) 415 | (pad 49 connect rect (at -5.08 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 416 | (net 9 A13)) 417 | (pad 50 connect rect (at -7.62 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 418 | (net 31 A12)) 419 | (pad 51 connect rect (at -10.16 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 420 | (net 12 A11)) 421 | (pad 52 connect rect (at -12.7 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 422 | (net 14 A10)) 423 | (pad 53 connect rect (at -15.24 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 424 | (net 11 A9)) 425 | (pad 54 connect rect (at -17.78 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 426 | (net 10 A8)) 427 | (pad 55 connect rect (at -20.32 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 428 | (net 30 A7)) 429 | (pad 56 connect rect (at -22.86 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 430 | (net 29 A6)) 431 | (pad 57 connect rect (at -25.4 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 432 | (net 28 A5)) 433 | (pad 58 connect rect (at -27.94 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 434 | (net 27 A4)) 435 | (pad 59 connect rect (at -30.48 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 436 | (net 26 A3)) 437 | (pad 60 connect rect (at -33.02 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 438 | (net 25 A2)) 439 | (pad 61 connect rect (at -35.56 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 440 | (net 24 A1)) 441 | (pad 62 connect rect (at -38.1 0.381) (size 1.524 6.858) (layers F.Cu F.Mask) 442 | (net 23 A0)) 443 | ) 444 | 445 | (gr_line (start 248.92 99.06) (end 248.92 137.16) (layer Edge.Cuts) (width 0.05) (tstamp 60414510)) 446 | (gr_line (start 167.64 99.06) (end 248.92 99.06) (layer Edge.Cuts) (width 0.05)) 447 | (gr_line (start 167.64 130.81) (end 167.64 99.06) (layer Edge.Cuts) (width 0.05)) 448 | (gr_line (start 167.64 137.16) (end 167.64 130.81) (layer Edge.Cuts) (width 0.05)) 449 | (gr_line (start 168.91 138.43) (end 167.64 137.16) (layer Edge.Cuts) (width 0.05)) 450 | (gr_line (start 247.65 138.43) (end 168.91 138.43) (layer Edge.Cuts) (width 0.05)) 451 | (gr_line (start 248.92 137.16) (end 247.65 138.43) (layer Edge.Cuts) (width 0.05)) 452 | 453 | (via (at 219.71 109.22) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6)) 454 | (segment (start 175.26 120.65) (end 192.024 103.886) (width 0.25) (layer B.Cu) (net 1)) 455 | (segment (start 175.26 135.001) (end 175.26 120.65) (width 0.25) (layer B.Cu) (net 1)) 456 | (segment (start 230.114151 102.518989) (end 240.03 112.434838) (width 0.25) (layer B.Cu) (net 1)) 457 | (segment (start 192.024 103.886) (end 193.391011 102.518989) (width 0.25) (layer B.Cu) (net 1)) 458 | (segment (start 193.391011 102.518989) (end 230.114151 102.518989) (width 0.25) (layer B.Cu) (net 1)) 459 | (segment (start 240.03 112.434838) (end 240.03 122.174) (width 0.25) (layer B.Cu) (net 1)) 460 | (segment (start 240.03 122.174) (end 240.03 122.174) (width 0.25) (layer B.Cu) (net 1) (tstamp 604144C4)) 461 | (via (at 240.03 122.174) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) 462 | (segment (start 241.3 131.322) (end 240.03 130.052) (width 0.25) (layer B.Cu) (net 1)) 463 | (segment (start 241.3 135.001) (end 241.3 131.322) (width 0.25) (layer B.Cu) (net 1)) 464 | (segment (start 240.03 130.052) (end 240.03 127.508) (width 0.25) (layer B.Cu) (net 1)) 465 | (segment (start 240.03 127.508) (end 240.03 127.508) (width 0.25) (layer B.Cu) (net 1) (tstamp 604144C6)) 466 | (via (at 240.03 127.508) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) 467 | (segment (start 240.03 127.508) (end 240.03 122.174) (width 0.25) (layer F.Cu) (net 1)) 468 | (segment (start 201.471907 113.333907) (end 192.024 103.886) (width 1) (layer F.Cu) (net 1)) 469 | (segment (start 222.967093 113.333907) (end 201.471907 113.333907) (width 1) (layer F.Cu) (net 1)) 470 | (segment (start 222.967093 113.333907) (end 226.06 113.333907) (width 1) (layer F.Cu) (net 1)) 471 | (segment (start 223.52 125.73) (end 223.52 135.001) (width 0.25) (layer B.Cu) (net 2)) 472 | (segment (start 230.124 119.126) (end 223.52 125.73) (width 0.25) (layer B.Cu) (net 2)) 473 | (segment (start 234.775999 119.717999) (end 246.38 131.322) (width 0.25) (layer B.Cu) (net 2)) 474 | (segment (start 230.124 119.126) (end 230.715999 119.717999) (width 0.25) (layer B.Cu) (net 2)) 475 | (segment (start 230.715999 119.717999) (end 234.775999 119.717999) (width 0.25) (layer B.Cu) (net 2)) 476 | (segment (start 246.38 131.322) (end 246.38 135.001) (width 0.25) (layer B.Cu) (net 2)) 477 | (segment (start 230.300552 102.06898) (end 246.38 118.148428) (width 0.25) (layer B.Cu) (net 2)) 478 | (segment (start 192.483858 102.06898) (end 230.300552 102.06898) (width 0.25) (layer B.Cu) (net 2)) 479 | (segment (start 170.18 124.372838) (end 192.483858 102.06898) (width 0.25) (layer B.Cu) (net 2)) 480 | (segment (start 246.38 118.148428) (end 246.38 131.322) (width 0.25) (layer B.Cu) (net 2)) 481 | (segment (start 170.18 135.001) (end 170.18 124.372838) (width 0.25) (layer B.Cu) (net 2)) 482 | (segment (start 230.124 119.126) (end 230.124 115.227) (width 1) (layer F.Cu) (net 2)) 483 | (segment (start 228.230907 113.333907) (end 227.635 113.333907) (width 1) (layer F.Cu) (net 2)) 484 | (segment (start 230.124 115.227) (end 228.230907 113.333907) (width 1) (layer F.Cu) (net 2)) 485 | (segment (start 210.82 129.119162) (end 210.82 135.001) (width 0.25) (layer F.Cu) (net 3)) 486 | (segment (start 194.564 119.126) (end 195.931011 117.758989) (width 0.25) (layer F.Cu) (net 3)) 487 | (segment (start 200.270562 117.75899) (end 201.266999 118.755427) (width 0.25) (layer F.Cu) (net 3)) 488 | (segment (start 201.266999 118.755427) (end 201.266999 119.566161) (width 0.25) (layer F.Cu) (net 3)) 489 | (segment (start 195.931011 117.758989) (end 200.270562 117.75899) (width 0.25) (layer F.Cu) (net 3)) 490 | (segment (start 201.266999 119.566161) (end 210.82 129.119162) (width 0.25) (layer F.Cu) (net 3)) 491 | (segment (start 213.36 135.001) (end 213.36 129.54) (width 0.25) (layer F.Cu) (net 4)) 492 | (segment (start 213.36 129.54) (end 213.36 129.54) (width 0.25) (layer F.Cu) (net 4) (tstamp 6041449E)) 493 | (via (at 213.36 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 4)) 494 | (segment (start 213.36 129.54) (end 215.9 127) (width 0.25) (layer B.Cu) (net 4)) 495 | (segment (start 215.9 127) (end 215.9 111.76) (width 0.25) (layer B.Cu) (net 4)) 496 | (segment (start 215.9 111.76) (end 215.9 111.76) (width 0.25) (layer B.Cu) (net 4) (tstamp 604144C2)) 497 | (via (at 215.9 111.252) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 4) (tstamp 60DDCF0A)) 498 | (segment (start 197.695999 104.477999) (end 197.104 103.886) (width 0.25) (layer F.Cu) (net 4)) 499 | (segment (start 204.334002 111.116002) (end 197.695999 104.477999) (width 0.25) (layer F.Cu) (net 4)) 500 | (segment (start 211.069002 111.116002) (end 204.334002 111.116002) (width 0.25) (layer F.Cu) (net 4)) 501 | (segment (start 211.658005 110.526999) (end 211.069002 111.116002) (width 0.25) (layer F.Cu) (net 4)) 502 | (segment (start 215.174999 110.526999) (end 211.658005 110.526999) (width 0.25) (layer F.Cu) (net 4)) 503 | (segment (start 215.9 111.252) (end 215.174999 110.526999) (width 0.25) (layer F.Cu) (net 4)) 504 | (segment (start 215.9 111.76) (end 215.9 111.252) (width 0.25) (layer B.Cu) (net 4)) 505 | (segment (start 215.9 135.001) (end 215.9 129.54) (width 0.25) (layer F.Cu) (net 5)) 506 | (segment (start 215.9 129.54) (end 215.9 129.54) (width 0.25) (layer F.Cu) (net 5) (tstamp 6041449C)) 507 | (via (at 215.9 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 5)) 508 | (segment (start 191.182 119.126) (end 192.024 119.126) (width 0.25) (layer B.Cu) (net 5)) 509 | (segment (start 189.774999 120.533001) (end 191.182 119.126) (width 0.25) (layer B.Cu) (net 5)) 510 | (segment (start 189.774999 129.888001) (end 189.774999 120.533001) (width 0.25) (layer B.Cu) (net 5)) 511 | (segment (start 190.151999 130.265001) (end 189.774999 129.888001) (width 0.25) (layer B.Cu) (net 5)) 512 | (segment (start 215.174999 130.265001) (end 190.151999 130.265001) (width 0.25) (layer B.Cu) (net 5)) 513 | (segment (start 215.9 129.54) (end 215.174999 130.265001) (width 0.25) (layer B.Cu) (net 5)) 514 | (segment (start 218.44 122.007162) (end 220.881001 119.566161) (width 0.25) (layer F.Cu) (net 6)) 515 | (segment (start 218.44 135.001) (end 218.44 122.007162) (width 0.25) (layer F.Cu) (net 6)) 516 | (segment (start 220.881001 119.566161) (end 220.881001 118.265001) (width 0.25) (layer F.Cu) (net 6)) 517 | (segment (start 220.881001 118.265001) (end 219.71 117.094) (width 0.25) (layer F.Cu) (net 6)) 518 | (segment (start 219.71 117.094) (end 219.71 115.824) (width 0.25) (layer F.Cu) (net 6)) 519 | (segment (start 219.71 115.824) (end 219.71 115.824) (width 0.25) (layer F.Cu) (net 6) (tstamp 60DDD187)) 520 | (via (at 219.71 115.824) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6)) 521 | (segment (start 217.424 106.934) (end 219.71 109.22) (width 0.25) (layer F.Cu) (net 6)) 522 | (segment (start 217.424 103.886) (end 217.424 106.934) (width 0.25) (layer F.Cu) (net 6)) 523 | (segment (start 219.71 109.22) (end 219.71 115.824) (width 0.25) (layer B.Cu) (net 6)) 524 | (segment (start 200.235999 103.294001) (end 199.644 103.886) (width 0.25) (layer B.Cu) (net 7)) 525 | (segment (start 220.404161 102.968999) (end 200.561001 102.968999) (width 0.25) (layer B.Cu) (net 7)) 526 | (segment (start 220.98 103.544838) (end 220.404161 102.968999) (width 0.25) (layer B.Cu) (net 7)) 527 | (segment (start 200.561001 102.968999) (end 200.235999 103.294001) (width 0.25) (layer B.Cu) (net 7)) 528 | (segment (start 220.98 135.001) (end 220.98 103.544838) (width 0.25) (layer B.Cu) (net 7)) 529 | (segment (start 198.021001 118.208999) (end 197.104 119.126) (width 0.25) (layer F.Cu) (net 8)) 530 | (segment (start 205.74 135.001) (end 205.74 127) (width 0.25) (layer F.Cu) (net 8)) 531 | (segment (start 200.561001 121.821001) (end 200.561001 118.685839) (width 0.25) (layer F.Cu) (net 8)) 532 | (segment (start 200.561001 118.685839) (end 200.084161 118.208999) (width 0.25) (layer F.Cu) (net 8)) 533 | (segment (start 205.74 127) (end 200.561001 121.821001) (width 0.25) (layer F.Cu) (net 8)) 534 | (segment (start 200.084161 118.208999) (end 198.021001 118.208999) (width 0.25) (layer F.Cu) (net 8)) 535 | (segment (start 203.2 135.001) (end 203.2 131.322) (width 0.25) (layer F.Cu) (net 9)) 536 | (segment (start 203.2 131.322) (end 203.2 129.54) (width 0.25) (layer F.Cu) (net 9)) 537 | (segment (start 203.2 129.54) (end 203.2 129.54) (width 0.25) (layer F.Cu) (net 9) (tstamp 604144A2)) 538 | (via (at 203.2 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 9)) 539 | (segment (start 210.721001 122.018999) (end 210.721001 113.382999) (width 0.25) (layer B.Cu) (net 9)) 540 | (segment (start 203.2 129.54) (end 210.721001 122.018999) (width 0.25) (layer B.Cu) (net 9)) 541 | (segment (start 210.721001 113.382999) (end 210.721001 110.391001) (width 0.25) (layer B.Cu) (net 9)) 542 | (segment (start 210.721001 110.391001) (end 210.721001 110.391001) (width 0.25) (layer B.Cu) (net 9) (tstamp 604144B9)) 543 | (via (at 210.721001 110.391001) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 9)) 544 | (segment (start 202.184 104.723214) (end 202.184 103.886) (width 0.25) (layer F.Cu) (net 9)) 545 | (segment (start 202.184 106.737002) (end 202.184 104.723214) (width 0.25) (layer F.Cu) (net 9)) 546 | (segment (start 205.837999 110.391001) (end 202.184 106.737002) (width 0.25) (layer F.Cu) (net 9)) 547 | (segment (start 210.721001 110.391001) (end 205.837999 110.391001) (width 0.25) (layer F.Cu) (net 9)) 548 | (segment (start 190.5 135.001) (end 190.5 131.322) (width 0.25) (layer F.Cu) (net 10)) 549 | (segment (start 190.5 131.322) (end 190.5 129.54) (width 0.25) (layer F.Cu) (net 10)) 550 | (segment (start 190.5 129.54) (end 190.5 129.54) (width 0.25) (layer F.Cu) (net 10) (tstamp 604144AA)) 551 | (via (at 190.5 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 10)) 552 | (segment (start 204.132001 104.477999) (end 204.724 103.886) (width 0.25) (layer B.Cu) (net 10)) 553 | (segment (start 196.186999 112.423001) (end 204.132001 104.477999) (width 0.25) (layer B.Cu) (net 10)) 554 | (segment (start 196.186999 123.853001) (end 196.186999 112.423001) (width 0.25) (layer B.Cu) (net 10)) 555 | (segment (start 190.5 129.54) (end 196.186999 123.853001) (width 0.25) (layer B.Cu) (net 10)) 556 | (segment (start 193.04 135.001) (end 193.04 129.54) (width 0.25) (layer F.Cu) (net 11)) 557 | (segment (start 193.04 129.54) (end 193.04 129.54) (width 0.25) (layer F.Cu) (net 11) (tstamp 604144A8)) 558 | (via (at 193.04 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 11)) 559 | (segment (start 198.021001 113.128999) (end 206.672001 104.477999) (width 0.25) (layer B.Cu) (net 11)) 560 | (segment (start 206.672001 104.477999) (end 207.264 103.886) (width 0.25) (layer B.Cu) (net 11)) 561 | (segment (start 198.021001 124.558999) (end 198.021001 113.128999) (width 0.25) (layer B.Cu) (net 11)) 562 | (segment (start 193.04 129.54) (end 198.021001 124.558999) (width 0.25) (layer B.Cu) (net 11)) 563 | (segment (start 198.12 135.001) (end 198.12 129.54) (width 0.25) (layer F.Cu) (net 12)) 564 | (segment (start 198.12 129.54) (end 198.12 129.54) (width 0.25) (layer F.Cu) (net 12) (tstamp 604144A4)) 565 | (via (at 198.12 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 12)) 566 | (segment (start 209.212001 104.477999) (end 209.804 103.886) (width 0.25) (layer B.Cu) (net 12)) 567 | (segment (start 208.886999 118.860163) (end 208.886999 104.803001) (width 0.25) (layer B.Cu) (net 12)) 568 | (segment (start 198.207162 129.54) (end 208.886999 118.860163) (width 0.25) (layer B.Cu) (net 12)) 569 | (segment (start 208.886999 104.803001) (end 209.212001 104.477999) (width 0.25) (layer B.Cu) (net 12)) 570 | (segment (start 198.12 129.54) (end 198.207162 129.54) (width 0.25) (layer B.Cu) (net 12)) 571 | (segment (start 218.44 109.982) (end 212.344 103.886) (width 0.25) (layer B.Cu) (net 13)) 572 | (segment (start 218.44 135.001) (end 218.44 109.982) (width 0.25) (layer B.Cu) (net 13)) 573 | (segment (start 195.58 135.001) (end 195.58 131.322) (width 0.25) (layer F.Cu) (net 14)) 574 | (segment (start 195.58 131.322) (end 195.58 129.54) (width 0.25) (layer F.Cu) (net 14)) 575 | (segment (start 195.58 129.54) (end 195.58 129.54) (width 0.25) (layer F.Cu) (net 14) (tstamp 604144A6)) 576 | (via (at 195.58 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 14)) 577 | (segment (start 196.145685 129.54) (end 205.74 119.945685) (width 0.25) (layer B.Cu) (net 14)) 578 | (segment (start 195.58 129.54) (end 196.145685 129.54) (width 0.25) (layer B.Cu) (net 14)) 579 | (segment (start 205.74 119.945685) (end 205.74 109.22) (width 0.25) (layer B.Cu) (net 14)) 580 | (segment (start 205.74 109.22) (end 205.74 109.22) (width 0.25) (layer B.Cu) (net 14) (tstamp 604144AC)) 581 | (via (at 205.74 109.22) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 14)) 582 | (segment (start 209.55 109.22) (end 205.74 109.22) (width 0.25) (layer F.Cu) (net 14)) 583 | (segment (start 214.884 103.886) (end 209.55 109.22) (width 0.25) (layer F.Cu) (net 14)) 584 | (segment (start 243.84 114.335608) (end 243.84 131.322) (width 0.25) (layer F.Cu) (net 15)) 585 | (segment (start 231.123364 101.618972) (end 243.84 114.335608) (width 0.25) (layer F.Cu) (net 15)) 586 | (segment (start 222.231028 101.618972) (end 231.123364 101.618972) (width 0.25) (layer F.Cu) (net 15)) 587 | (segment (start 243.84 131.322) (end 243.84 135.001) (width 0.25) (layer F.Cu) (net 15)) 588 | (segment (start 219.964 103.886) (end 222.231028 101.618972) (width 0.25) (layer F.Cu) (net 15)) 589 | (segment (start 241.3 131.322) (end 241.3 135.001) (width 0.25) (layer F.Cu) (net 16)) 590 | (segment (start 241.3 112.432018) (end 241.3 131.322) (width 0.25) (layer F.Cu) (net 16)) 591 | (segment (start 230.936963 102.068981) (end 241.3 112.432018) (width 0.25) (layer F.Cu) (net 16)) 592 | (segment (start 224.321019 102.068981) (end 230.936963 102.068981) (width 0.25) (layer F.Cu) (net 16)) 593 | (segment (start 222.504 103.886) (end 224.321019 102.068981) (width 0.25) (layer F.Cu) (net 16)) 594 | (segment (start 238.76 131.322) (end 238.76 135.001) (width 0.25) (layer F.Cu) (net 17)) 595 | (segment (start 238.76 110.528428) (end 238.76 131.322) (width 0.25) (layer F.Cu) (net 17)) 596 | (segment (start 230.750562 102.51899) (end 238.76 110.528428) (width 0.25) (layer F.Cu) (net 17)) 597 | (segment (start 226.41101 102.51899) (end 230.750562 102.51899) (width 0.25) (layer F.Cu) (net 17)) 598 | (segment (start 225.044 103.886) (end 226.41101 102.51899) (width 0.25) (layer F.Cu) (net 17)) 599 | (segment (start 236.22 108.624838) (end 236.22 131.322) (width 0.25) (layer F.Cu) (net 18)) 600 | (segment (start 230.564161 102.968999) (end 236.22 108.624838) (width 0.25) (layer F.Cu) (net 18)) 601 | (segment (start 228.501001 102.968999) (end 230.564161 102.968999) (width 0.25) (layer F.Cu) (net 18)) 602 | (segment (start 236.22 131.322) (end 236.22 135.001) (width 0.25) (layer F.Cu) (net 18)) 603 | (segment (start 227.584 103.886) (end 228.501001 102.968999) (width 0.25) (layer F.Cu) (net 18)) 604 | (segment (start 233.68 107.442) (end 233.68 135.001) (width 0.25) (layer F.Cu) (net 19)) 605 | (segment (start 230.124 103.886) (end 233.68 107.442) (width 0.25) (layer F.Cu) (net 19)) 606 | (segment (start 231.14 123.519214) (end 231.14 131.322) (width 0.25) (layer F.Cu) (net 20)) 607 | (segment (start 227.584 119.963214) (end 231.14 123.519214) (width 0.25) (layer F.Cu) (net 20)) 608 | (segment (start 231.14 131.322) (end 231.14 135.001) (width 0.25) (layer F.Cu) (net 20)) 609 | (segment (start 227.584 119.126) (end 227.584 119.963214) (width 0.25) (layer F.Cu) (net 20)) 610 | (segment (start 228.6 122.682) (end 228.6 135.001) (width 0.25) (layer F.Cu) (net 21)) 611 | (segment (start 225.044 119.126) (end 228.6 122.682) (width 0.25) (layer F.Cu) (net 21)) 612 | (segment (start 226.06 122.682) (end 226.06 135.001) (width 0.25) (layer F.Cu) (net 22)) 613 | (segment (start 222.504 119.126) (end 226.06 122.682) (width 0.25) (layer F.Cu) (net 22)) 614 | (segment (start 187.343083 114.158917) (end 170.18 131.322) (width 0.25) (layer F.Cu) (net 23)) 615 | (segment (start 214.159703 114.158917) (end 187.343083 114.158917) (width 0.25) (layer F.Cu) (net 23)) 616 | (segment (start 219.126786 119.126) (end 214.159703 114.158917) (width 0.25) (layer F.Cu) (net 23)) 617 | (segment (start 170.18 131.322) (end 170.18 135.001) (width 0.25) (layer F.Cu) (net 23)) 618 | (segment (start 219.964 119.126) (end 219.126786 119.126) (width 0.25) (layer F.Cu) (net 23)) 619 | (segment (start 189.433073 114.608927) (end 172.72 131.322) (width 0.25) (layer F.Cu) (net 24)) 620 | (segment (start 207.263999 114.608927) (end 189.433073 114.608927) (width 0.25) (layer F.Cu) (net 24)) 621 | (segment (start 172.72 131.322) (end 172.72 135.001) (width 0.25) (layer F.Cu) (net 24)) 622 | (segment (start 212.906925 114.608927) (end 207.263999 114.608927) (width 0.25) (layer F.Cu) (net 24)) 623 | (segment (start 217.424 119.126) (end 212.906925 114.608927) (width 0.25) (layer F.Cu) (net 24)) 624 | (segment (start 214.884 119.126) (end 210.816936 115.058936) (width 0.25) (layer F.Cu) (net 25)) 625 | (segment (start 210.816936 115.058936) (end 208.913343 115.058935) (width 0.25) (layer F.Cu) (net 25)) 626 | (segment (start 208.913343 115.058935) (end 205.739999 115.058936) (width 0.25) (layer F.Cu) (net 25)) 627 | (segment (start 175.26 131.322) (end 175.26 135.001) (width 0.25) (layer F.Cu) (net 25)) 628 | (segment (start 191.140012 115.058936) (end 175.26 130.938948) (width 0.25) (layer F.Cu) (net 25)) 629 | (segment (start 175.26 130.938948) (end 175.26 131.322) (width 0.25) (layer F.Cu) (net 25)) 630 | (segment (start 205.739999 115.058936) (end 191.140012 115.058936) (width 0.25) (layer F.Cu) (net 25)) 631 | (segment (start 177.8 131.322) (end 177.8 135.001) (width 0.25) (layer F.Cu) (net 26)) 632 | (segment (start 177.8 129.035358) (end 177.8 131.322) (width 0.25) (layer F.Cu) (net 26)) 633 | (segment (start 208.726944 115.508944) (end 191.326413 115.508945) (width 0.25) (layer F.Cu) (net 26)) 634 | (segment (start 191.326413 115.508945) (end 177.8 129.035358) (width 0.25) (layer F.Cu) (net 26)) 635 | (segment (start 212.344 119.126) (end 208.726944 115.508944) (width 0.25) (layer F.Cu) (net 26)) 636 | (segment (start 180.34 131.322) (end 180.34 135.001) (width 0.25) (layer F.Cu) (net 27)) 637 | (segment (start 209.804 119.126) (end 206.636954 115.958954) (width 0.25) (layer F.Cu) (net 27)) 638 | (segment (start 206.636954 115.958954) (end 199.389999 115.958954) (width 0.25) (layer F.Cu) (net 27)) 639 | (segment (start 191.512814 115.958954) (end 180.34 127.131768) (width 0.25) (layer F.Cu) (net 27)) 640 | (segment (start 199.389999 115.958954) (end 191.512814 115.958954) (width 0.25) (layer F.Cu) (net 27)) 641 | (segment (start 180.34 127.131768) (end 180.34 131.322) (width 0.25) (layer F.Cu) (net 27)) 642 | (segment (start 182.88 131.322) (end 182.88 135.001) (width 0.25) (layer F.Cu) (net 28)) 643 | (segment (start 182.88 125.228178) (end 182.88 131.322) (width 0.25) (layer F.Cu) (net 28)) 644 | (segment (start 207.264 119.126) (end 206.426786 119.126) (width 0.25) (layer F.Cu) (net 28)) 645 | (segment (start 206.426786 119.126) (end 203.709747 116.408963) (width 0.25) (layer F.Cu) (net 28)) 646 | (segment (start 203.709747 116.408963) (end 202.64337 116.408962) (width 0.25) (layer F.Cu) (net 28)) 647 | (segment (start 202.64337 116.408962) (end 191.699215 116.408963) (width 0.25) (layer F.Cu) (net 28)) 648 | (segment (start 191.699215 116.408963) (end 182.88 125.228178) (width 0.25) (layer F.Cu) (net 28)) 649 | (segment (start 185.42 131.322) (end 185.42 135.001) (width 0.25) (layer F.Cu) (net 29)) 650 | (segment (start 185.42 123.324588) (end 185.42 131.322) (width 0.25) (layer F.Cu) (net 29)) 651 | (segment (start 191.885616 116.858972) (end 185.42 123.324588) (width 0.25) (layer F.Cu) (net 29)) 652 | (segment (start 202.456971 116.858971) (end 191.885616 116.858972) (width 0.25) (layer F.Cu) (net 29)) 653 | (segment (start 204.724 119.126) (end 202.456971 116.858971) (width 0.25) (layer F.Cu) (net 29)) 654 | (segment (start 187.96 131.322) (end 187.96 135.001) (width 0.25) (layer F.Cu) (net 30)) 655 | (segment (start 192.072017 117.308981) (end 187.96 121.420998) (width 0.25) (layer F.Cu) (net 30)) 656 | (segment (start 200.456961 117.308981) (end 192.072017 117.308981) (width 0.25) (layer F.Cu) (net 30)) 657 | (segment (start 201.717008 118.569026) (end 200.456961 117.308981) (width 0.25) (layer F.Cu) (net 30)) 658 | (segment (start 187.96 121.420998) (end 187.96 131.322) (width 0.25) (layer F.Cu) (net 30)) 659 | (segment (start 201.93 119.126) (end 201.717009 118.913009) (width 0.25) (layer F.Cu) (net 30)) 660 | (segment (start 201.717009 118.913009) (end 201.717008 118.569026) (width 0.25) (layer F.Cu) (net 30)) 661 | (segment (start 202.184 119.126) (end 201.93 119.126) (width 0.25) (layer F.Cu) (net 30)) 662 | (segment (start 199.644 119.126) (end 199.644 126.492) (width 0.25) (layer F.Cu) (net 31)) 663 | (segment (start 200.66 127.508) (end 200.66 135.001) (width 0.25) (layer F.Cu) (net 31)) 664 | (segment (start 199.644 126.492) (end 200.66 127.508) (width 0.25) (layer F.Cu) (net 31)) 665 | (segment (start 208.28 135.001) (end 208.28 131.322) (width 0.25) (layer F.Cu) (net 32)) 666 | (segment (start 208.28 131.322) (end 208.28 129.54) (width 0.25) (layer F.Cu) (net 32)) 667 | (segment (start 208.28 129.54) (end 208.28 129.54) (width 0.25) (layer F.Cu) (net 32) (tstamp 604144A0)) 668 | (via (at 208.28 129.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 32)) 669 | (segment (start 208.28 129.54) (end 213.36 124.46) (width 0.25) (layer B.Cu) (net 32)) 670 | (segment (start 213.36 124.46) (end 213.36 113.284) (width 0.25) (layer B.Cu) (net 32)) 671 | (segment (start 213.36 113.284) (end 213.36 113.284) (width 0.25) (layer B.Cu) (net 32) (tstamp 604144C0)) 672 | (via (at 213.36 111.252) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 32)) 673 | (segment (start 213.36 113.284) (end 213.36 111.252) (width 0.25) (layer B.Cu) (net 32)) 674 | (segment (start 213.36 111.252) (end 212.103103 112.508897) (width 0.25) (layer F.Cu) (net 32)) 675 | (segment (start 203.186897 112.508897) (end 194.564 103.886) (width 0.25) (layer F.Cu) (net 32)) 676 | (segment (start 212.103103 112.508897) (end 203.186897 112.508897) (width 0.25) (layer F.Cu) (net 32)) 677 | 678 | ) 679 | -------------------------------------------------------------------------------- /MEMv1/ISAMEM.pro: -------------------------------------------------------------------------------- 1 | update=1.7.2021 11.40.35 2 | version=1 3 | last_client=kicad 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [cvpcb] 9 | version=1 10 | NetIExt=net 11 | [eeschema] 12 | version=1 13 | LibDir= 14 | [eeschema/libraries] 15 | [schematic_editor] 16 | version=1 17 | PageLayoutDescrFile= 18 | PlotDirectoryName= 19 | SubpartIdSeparator=0 20 | SubpartFirstId=65 21 | NetFmtName= 22 | SpiceAjustPassiveValues=0 23 | LabSize=25 24 | ERC_TestSimilarLabels=1 25 | [pcbnew] 26 | version=1 27 | PageLayoutDescrFile= 28 | LastNetListRead= 29 | CopperLayerCount=2 30 | BoardThickness=1.6 31 | AllowMicroVias=0 32 | AllowBlindVias=0 33 | RequireCourtyardDefinitions=0 34 | ProhibitOverlappingCourtyards=1 35 | MinTrackWidth=0.2 36 | MinViaDiameter=0.4 37 | MinViaDrill=0.3 38 | MinMicroViaDiameter=0.2 39 | MinMicroViaDrill=0.09999999999999999 40 | MinHoleToHole=0.25 41 | TrackWidth1=0.25 42 | TrackWidth2=1 43 | ViaDiameter1=0.8 44 | ViaDrill1=0.4 45 | dPairWidth1=0.2 46 | dPairGap1=0.25 47 | dPairViaGap1=0.25 48 | SilkLineWidth=0.12 49 | SilkTextSizeV=1 50 | SilkTextSizeH=1 51 | SilkTextSizeThickness=0.15 52 | SilkTextItalic=0 53 | SilkTextUpright=1 54 | CopperLineWidth=0.2 55 | CopperTextSizeV=1.5 56 | CopperTextSizeH=1.5 57 | CopperTextThickness=0.3 58 | CopperTextItalic=0 59 | CopperTextUpright=1 60 | EdgeCutLineWidth=0.05 61 | CourtyardLineWidth=0.05 62 | OthersLineWidth=0.15 63 | OthersTextSizeV=1 64 | OthersTextSizeH=1 65 | OthersTextSizeThickness=0.15 66 | OthersTextItalic=0 67 | OthersTextUpright=1 68 | SolderMaskClearance=0.051 69 | SolderMaskMinWidth=0.25 70 | SolderPasteClearance=0 71 | SolderPasteRatio=-0 72 | [pcbnew/Layer.F.Cu] 73 | Name=F.Cu 74 | Type=0 75 | Enabled=1 76 | [pcbnew/Layer.In1.Cu] 77 | Name=In1.Cu 78 | Type=0 79 | Enabled=0 80 | [pcbnew/Layer.In2.Cu] 81 | Name=In2.Cu 82 | Type=0 83 | Enabled=0 84 | [pcbnew/Layer.In3.Cu] 85 | Name=In3.Cu 86 | Type=0 87 | Enabled=0 88 | [pcbnew/Layer.In4.Cu] 89 | Name=In4.Cu 90 | Type=0 91 | Enabled=0 92 | [pcbnew/Layer.In5.Cu] 93 | Name=In5.Cu 94 | Type=0 95 | Enabled=0 96 | [pcbnew/Layer.In6.Cu] 97 | Name=In6.Cu 98 | Type=0 99 | Enabled=0 100 | [pcbnew/Layer.In7.Cu] 101 | Name=In7.Cu 102 | Type=0 103 | Enabled=0 104 | [pcbnew/Layer.In8.Cu] 105 | Name=In8.Cu 106 | Type=0 107 | Enabled=0 108 | [pcbnew/Layer.In9.Cu] 109 | Name=In9.Cu 110 | Type=0 111 | Enabled=0 112 | [pcbnew/Layer.In10.Cu] 113 | Name=In10.Cu 114 | Type=0 115 | Enabled=0 116 | [pcbnew/Layer.In11.Cu] 117 | Name=In11.Cu 118 | Type=0 119 | Enabled=0 120 | [pcbnew/Layer.In12.Cu] 121 | Name=In12.Cu 122 | Type=0 123 | Enabled=0 124 | [pcbnew/Layer.In13.Cu] 125 | Name=In13.Cu 126 | Type=0 127 | Enabled=0 128 | [pcbnew/Layer.In14.Cu] 129 | Name=In14.Cu 130 | Type=0 131 | Enabled=0 132 | [pcbnew/Layer.In15.Cu] 133 | Name=In15.Cu 134 | Type=0 135 | Enabled=0 136 | [pcbnew/Layer.In16.Cu] 137 | Name=In16.Cu 138 | Type=0 139 | Enabled=0 140 | [pcbnew/Layer.In17.Cu] 141 | Name=In17.Cu 142 | Type=0 143 | Enabled=0 144 | [pcbnew/Layer.In18.Cu] 145 | Name=In18.Cu 146 | Type=0 147 | Enabled=0 148 | [pcbnew/Layer.In19.Cu] 149 | Name=In19.Cu 150 | Type=0 151 | Enabled=0 152 | [pcbnew/Layer.In20.Cu] 153 | Name=In20.Cu 154 | Type=0 155 | Enabled=0 156 | [pcbnew/Layer.In21.Cu] 157 | Name=In21.Cu 158 | Type=0 159 | Enabled=0 160 | [pcbnew/Layer.In22.Cu] 161 | Name=In22.Cu 162 | Type=0 163 | Enabled=0 164 | [pcbnew/Layer.In23.Cu] 165 | Name=In23.Cu 166 | Type=0 167 | Enabled=0 168 | [pcbnew/Layer.In24.Cu] 169 | Name=In24.Cu 170 | Type=0 171 | Enabled=0 172 | [pcbnew/Layer.In25.Cu] 173 | Name=In25.Cu 174 | Type=0 175 | Enabled=0 176 | [pcbnew/Layer.In26.Cu] 177 | Name=In26.Cu 178 | Type=0 179 | Enabled=0 180 | [pcbnew/Layer.In27.Cu] 181 | Name=In27.Cu 182 | Type=0 183 | Enabled=0 184 | [pcbnew/Layer.In28.Cu] 185 | Name=In28.Cu 186 | Type=0 187 | Enabled=0 188 | [pcbnew/Layer.In29.Cu] 189 | Name=In29.Cu 190 | Type=0 191 | Enabled=0 192 | [pcbnew/Layer.In30.Cu] 193 | Name=In30.Cu 194 | Type=0 195 | Enabled=0 196 | [pcbnew/Layer.B.Cu] 197 | Name=B.Cu 198 | Type=0 199 | Enabled=1 200 | [pcbnew/Layer.B.Adhes] 201 | Enabled=1 202 | [pcbnew/Layer.F.Adhes] 203 | Enabled=1 204 | [pcbnew/Layer.B.Paste] 205 | Enabled=1 206 | [pcbnew/Layer.F.Paste] 207 | Enabled=1 208 | [pcbnew/Layer.B.SilkS] 209 | Enabled=1 210 | [pcbnew/Layer.F.SilkS] 211 | Enabled=1 212 | [pcbnew/Layer.B.Mask] 213 | Enabled=1 214 | [pcbnew/Layer.F.Mask] 215 | Enabled=1 216 | [pcbnew/Layer.Dwgs.User] 217 | Enabled=1 218 | [pcbnew/Layer.Cmts.User] 219 | Enabled=1 220 | [pcbnew/Layer.Eco1.User] 221 | Enabled=1 222 | [pcbnew/Layer.Eco2.User] 223 | Enabled=1 224 | [pcbnew/Layer.Edge.Cuts] 225 | Enabled=1 226 | [pcbnew/Layer.Margin] 227 | Enabled=1 228 | [pcbnew/Layer.B.CrtYd] 229 | Enabled=1 230 | [pcbnew/Layer.F.CrtYd] 231 | Enabled=1 232 | [pcbnew/Layer.B.Fab] 233 | Enabled=1 234 | [pcbnew/Layer.F.Fab] 235 | Enabled=1 236 | [pcbnew/Layer.Rescue] 237 | Enabled=0 238 | [pcbnew/Netclasses] 239 | [pcbnew/Netclasses/Default] 240 | Name=Default 241 | Clearance=0.2 242 | TrackWidth=0.25 243 | ViaDiameter=0.8 244 | ViaDrill=0.4 245 | uViaDiameter=0.3 246 | uViaDrill=0.1 247 | dPairWidth=0.2 248 | dPairGap=0.25 249 | dPairViaGap=0.25 250 | -------------------------------------------------------------------------------- /MEMv1/ISAMEM.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 30 0 3 | EELAYER END 4 | $Descr A4 11693 8268 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "" 8 | Date "" 9 | Rev "" 10 | Comp "" 11 | Comment1 "" 12 | Comment2 "" 13 | Comment3 "" 14 | Comment4 "" 15 | $EndDescr 16 | $Comp 17 | L Connector:Bus_ISA_8bit J1 18 | U 1 1 60405B30 19 | P 2850 3625 20 | F 0 "J1" H 2850 5392 50 0000 C CNN 21 | F 1 "Bus_ISA_8bit" H 2850 5301 50 0000 C CNN 22 | F 2 "adlib:BUS_PC" H 2850 3625 50 0001 C CNN 23 | F 3 "https://en.wikipedia.org/wiki/Industry_Standard_Architecture" H 2850 3625 50 0001 C CNN 24 | 1 2850 3625 25 | 1 0 0 -1 26 | $EndComp 27 | Text GLabel 3550 5125 2 50 Output ~ 0 28 | A0 29 | Text GLabel 3550 5025 2 50 Output ~ 0 30 | A1 31 | Text GLabel 3550 4925 2 50 Output ~ 0 32 | A2 33 | Text GLabel 3550 4825 2 50 Output ~ 0 34 | A3 35 | Text GLabel 3550 4725 2 50 Output ~ 0 36 | A4 37 | Text GLabel 3550 4625 2 50 Output ~ 0 38 | A5 39 | Text GLabel 3550 4525 2 50 Output ~ 0 40 | A6 41 | Text GLabel 3550 4425 2 50 Output ~ 0 42 | A7 43 | Text GLabel 3550 4325 2 50 Output ~ 0 44 | A8 45 | Text GLabel 3550 4225 2 50 Output ~ 0 46 | A9 47 | Text GLabel 3550 4125 2 50 Output ~ 0 48 | A10 49 | Text GLabel 3550 4025 2 50 Output ~ 0 50 | A11 51 | Text GLabel 3550 3925 2 50 Output ~ 0 52 | A12 53 | Text GLabel 3550 3825 2 50 Output ~ 0 54 | A13 55 | Text GLabel 3550 3725 2 50 Output ~ 0 56 | A14 57 | Text GLabel 3550 3625 2 50 Output ~ 0 58 | A15 59 | Text GLabel 3550 3525 2 50 Output ~ 0 60 | A16 61 | Text GLabel 3550 3425 2 50 Output ~ 0 62 | A17 63 | Text GLabel 3550 3325 2 50 Output ~ 0 64 | A18 65 | Text GLabel 3550 3225 2 50 Output ~ 0 66 | A19 67 | Text GLabel 3550 2925 2 50 BiDi ~ 0 68 | D0 69 | Text GLabel 3550 2825 2 50 BiDi ~ 0 70 | D1 71 | Text GLabel 3550 2725 2 50 BiDi ~ 0 72 | D2 73 | Text GLabel 3550 2625 2 50 BiDi ~ 0 74 | D3 75 | Text GLabel 3550 2525 2 50 BiDi ~ 0 76 | D4 77 | Text GLabel 3550 2425 2 50 BiDi ~ 0 78 | D5 79 | Text GLabel 3550 2325 2 50 BiDi ~ 0 80 | D6 81 | Text GLabel 3550 2225 2 50 BiDi ~ 0 82 | D7 83 | Text GLabel 2150 3125 0 50 Output ~ 0 84 | ~MEMW 85 | Text GLabel 2150 3225 0 50 Output ~ 0 86 | ~MEMR 87 | Text GLabel 2150 2325 0 50 UnSpc ~ 0 88 | V5 89 | Text GLabel 2150 5125 0 50 UnSpc ~ 0 90 | GND 91 | $Comp 92 | L SamacSys_Parts:AS6C4008-55PCN IC3 93 | U 1 1 60412523 94 | P 6400 3000 95 | F 0 "IC3" H 6900 3265 50 0000 C CNN 96 | F 1 "AS6C4008-55PCN" H 6900 3174 50 0000 C CNN 97 | F 2 "DIP1524W58P254L4191H406Q32N" H 7250 3100 50 0001 L CNN 98 | F 3 "http://componentsearchengine.com/Datasheets/1/AS6C4008-55PCN.pdf" H 7250 3000 50 0001 L CNN 99 | F 4 "CMOS SRAM" H 7250 2900 50 0001 L CNN "Description" 100 | F 5 "4.064" H 7250 2800 50 0001 L CNN "Height" 101 | F 6 "913-AS6C4008-55PCN" H 7250 2700 50 0001 L CNN "Mouser Part Number" 102 | F 7 "https://www.mouser.co.uk/ProductDetail/Alliance-Memory/AS6C4008-55PCN/?qs=E5c5%252Bmu3i3%252BMOyro1Tlhzg%3D%3D" H 7250 2600 50 0001 L CNN "Mouser Price/Stock" 103 | F 8 "Alliance Memory" H 7250 2500 50 0001 L CNN "Manufacturer_Name" 104 | F 9 "AS6C4008-55PCN" H 7250 2400 50 0001 L CNN "Manufacturer_Part_Number" 105 | 1 6400 3000 106 | 1 0 0 -1 107 | $EndComp 108 | Text GLabel 7400 4000 2 50 Input ~ 0 109 | A19 110 | Text GLabel 7400 3000 2 50 UnSpc ~ 0 111 | V5 112 | Text GLabel 6400 4200 0 50 BiDi ~ 0 113 | D0 114 | Text GLabel 6400 4300 0 50 BiDi ~ 0 115 | D1 116 | Text GLabel 6400 4400 0 50 BiDi ~ 0 117 | D2 118 | Text GLabel 6400 4500 0 50 UnSpc ~ 0 119 | GND 120 | Text GLabel 6400 4100 0 50 Input ~ 0 121 | A0 122 | Text GLabel 6400 4000 0 50 Input ~ 0 123 | A1 124 | Text GLabel 6400 3900 0 50 Input ~ 0 125 | A2 126 | Text GLabel 6400 3800 0 50 Input ~ 0 127 | A3 128 | Text GLabel 6400 3700 0 50 Input ~ 0 129 | A4 130 | Text GLabel 6400 3600 0 50 Input ~ 0 131 | A5 132 | Text GLabel 6400 3500 0 50 Input ~ 0 133 | A6 134 | Text GLabel 6400 3400 0 50 Input ~ 0 135 | A7 136 | Text GLabel 7400 3500 2 50 Input ~ 0 137 | A8 138 | Text GLabel 7400 3600 2 50 Input ~ 0 139 | A9 140 | Text GLabel 7400 3900 2 50 Input ~ 0 141 | A10 142 | Text GLabel 7400 3700 2 50 Input ~ 0 143 | A11 144 | Text GLabel 7400 3800 2 50 Input ~ 0 145 | ~MEMR 146 | Text GLabel 7400 3300 2 50 Input ~ 0 147 | ~MEMW 148 | Text GLabel 7400 3400 2 50 Input ~ 0 149 | A13 150 | Text GLabel 7400 4500 2 50 BiDi ~ 0 151 | D3 152 | Text GLabel 7400 4400 2 50 BiDi ~ 0 153 | D4 154 | Text GLabel 7400 4300 2 50 BiDi ~ 0 155 | D5 156 | Text GLabel 7400 4200 2 50 BiDi ~ 0 157 | D6 158 | Text GLabel 7400 4100 2 50 BiDi ~ 0 159 | D7 160 | Text GLabel 7400 3100 2 50 Input ~ 0 161 | A15 162 | Text GLabel 7400 3200 2 50 Input ~ 0 163 | A17 164 | Text GLabel 6400 3300 0 50 Input ~ 0 165 | A12 166 | Text GLabel 6400 3200 0 50 Input ~ 0 167 | A14 168 | Text GLabel 6400 3100 0 50 Input ~ 0 169 | A16 170 | Text GLabel 6400 3000 0 50 Input ~ 0 171 | A18 172 | Text GLabel 2150 4925 0 50 UnSpc ~ 0 173 | V5 174 | Text GLabel 2150 2125 0 50 UnSpc ~ 0 175 | GND 176 | Text GLabel 2150 3025 0 50 UnSpc ~ 0 177 | GND 178 | $Comp 179 | L Device:C C1 180 | U 1 1 60DD8211 181 | P 5150 3750 182 | F 0 "C1" H 5265 3796 50 0000 L CNN 183 | F 1 "10uF" H 5265 3705 50 0000 L CNN 184 | F 2 "Capacitor_SMD:C_0603_1608Metric" H 5188 3600 50 0001 C CNN 185 | F 3 "~" H 5150 3750 50 0001 C CNN 186 | 1 5150 3750 187 | 1 0 0 -1 188 | $EndComp 189 | Text GLabel 5150 3900 3 50 UnSpc ~ 0 190 | GND 191 | Text GLabel 5150 3600 1 50 UnSpc ~ 0 192 | V5 193 | $EndSCHEMATC 194 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RPiISA 2 | Raspberry Pi to ISA bus, including Adlib emulation and PCB 3 | 4 | Emulator to ISA (e.g. VGA-adapter), i.e. files in the directories beginning 20231105, correspond to this video: 5 | 6 | https://www.youtube.com/watch?v=V3mTAtPauRs 7 | 8 | Portions of the emulator code are from this project: https://github.com/adriancable/8086tiny 9 | -------------------------------------------------------------------------------- /adlib.c: -------------------------------------------------------------------------------- 1 | // g++ -O3 -c opl.cpp 2 | // gcc -O0 adlib.c opl.o -lpthread -lm 3 | // sudo modprobe snd-pcm-oss 4 | // ./a.out 5 | #define _GNU_SOURCE 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | unsigned char BA[256], BB[256]; 17 | unsigned char idx = 0; 18 | 19 | void adlib(void) { 20 | short buf[1024]; 21 | int a; 22 | 23 | int fd = open("/dev/dsp", O_WRONLY); 24 | a = 16; ioctl(fd, SOUND_PCM_WRITE_BITS, &a); 25 | a = 2; ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &a); 26 | a = 44100; ioctl(fd, SOUND_PCM_WRITE_RATE, &a); 27 | a = (4 << 16) | 9; ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &a); 28 | for(;;) { 29 | /* have the adlib emulator create the waveform */ 30 | adlib_getsample(buf, 512); 31 | 32 | /* write the waveform to a file */ 33 | write(fd, buf, sizeof(buf)); 34 | } 35 | } 36 | 37 | int main() { 38 | unsigned int *gpio; 39 | unsigned char portb, portc = 0, data; 40 | unsigned char ai, ad; 41 | unsigned int i = 0; 42 | unsigned int porta; 43 | pthread_t th0; 44 | 45 | adlib_init(44100); 46 | 47 | int fdgpio = open("/dev/gpiomem", O_RDWR); 48 | gpio = (unsigned int *)mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fdgpio, 0); 49 | 50 | gpio[0] = 0; // pins 00-09 are input 51 | gpio[1] = 0; // pins 10-19 are input 52 | gpio[2] = 0; // pins 20-29 are input 53 | gpio[3] = gpio[3]&0xFFFFFFFC; // pins 30-31 are input 54 | 55 | pthread_create(&th0, NULL, (void*)adlib, NULL); 56 | 57 | for(;;) { 58 | porta = gpio[13]; 59 | portb = porta&1; 60 | if(portb>12)&0x3FF)) { 62 | case 0x388: 63 | ai = (porta>>4)&0xFF; 64 | break; 65 | case 0x389: 66 | adlib_write(ai, (porta>>4)&0xFF); 67 | break; 68 | } 69 | } 70 | portc = portb; 71 | } 72 | 73 | return 0; 74 | } 75 | -------------------------------------------------------------------------------- /le.adl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eigenco/RPiISA/1f57fa4a2ca5f0cd25a7843db3d658d8adc595e6/le.adl -------------------------------------------------------------------------------- /opl.h: -------------------------------------------------------------------------------- 1 | #define OPLTYPE_IS_OPL3 2 | 3 | /* 4 | * Copyright (C) 2002-2010 The DOSBox Team 5 | * OPL2/OPL3 emulation library 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU Lesser General Public 9 | * License as published by the Free Software Foundation; either 10 | * version 2.1 of the License, or (at your option) any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | * Lesser General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU Lesser General Public 18 | * License along with this library; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 | */ 21 | 22 | 23 | /* 24 | * Originally based on ADLIBEMU.C, an AdLib/OPL2 emulation library by Ken Silverman 25 | * Copyright (C) 1998-2001 Ken Silverman 26 | * Ken Silverman's official web site: "http://www.advsys.net/ken" 27 | */ 28 | 29 | 30 | #define fltype double 31 | 32 | /* 33 | define Bits, Bitu, Bit32s, Bit32u, Bit16s, Bit16u, Bit8s, Bit8u here 34 | */ 35 | 36 | #include 37 | typedef uintptr_t Bitu; 38 | typedef intptr_t Bits; 39 | typedef uint32_t Bit32u; 40 | typedef int32_t Bit32s; 41 | typedef uint16_t Bit16u; 42 | typedef int16_t Bit16s; 43 | typedef uint8_t Bit8u; 44 | typedef int8_t Bit8s; 45 | 46 | 47 | /* 48 | define attribution that inlines/forces inlining of a function (optional) 49 | */ 50 | //#define OPL_INLINE INLINE 51 | #define OPL_INLINE 52 | 53 | 54 | #undef NUM_CHANNELS 55 | #if defined(OPLTYPE_IS_OPL3) 56 | #define NUM_CHANNELS 18 57 | #else 58 | #define NUM_CHANNELS 9 59 | #endif 60 | 61 | #define MAXOPERATORS (NUM_CHANNELS*2) 62 | 63 | 64 | #define FL05 ((fltype)0.5) 65 | #define FL2 ((fltype)2.0) 66 | #define PI ((fltype)3.1415926535897932384626433832795) 67 | 68 | 69 | #define FIXEDPT 0x10000 // fixed-point calculations using 16+16 70 | #define FIXEDPT_LFO 0x1000000 // fixed-point calculations using 8+24 71 | 72 | #define WAVEPREC 1024 // waveform precision (10 bits) 73 | 74 | #define INTFREQU ((fltype)(14318180.0 / 288.0)) // clocking of the chip 75 | 76 | 77 | #define OF_TYPE_ATT 0 78 | #define OF_TYPE_DEC 1 79 | #define OF_TYPE_REL 2 80 | #define OF_TYPE_SUS 3 81 | #define OF_TYPE_SUS_NOKEEP 4 82 | #define OF_TYPE_OFF 5 83 | 84 | #define ARC_CONTROL 0x00 85 | #define ARC_TVS_KSR_MUL 0x20 86 | #define ARC_KSL_OUTLEV 0x40 87 | #define ARC_ATTR_DECR 0x60 88 | #define ARC_SUSL_RELR 0x80 89 | #define ARC_FREQ_NUM 0xa0 90 | #define ARC_KON_BNUM 0xb0 91 | #define ARC_PERC_MODE 0xbd 92 | #define ARC_FEEDBACK 0xc0 93 | #define ARC_WAVE_SEL 0xe0 94 | 95 | #define ARC_SECONDSET 0x100 // second operator set for OPL3 96 | 97 | 98 | #define OP_ACT_OFF 0x00 99 | #define OP_ACT_NORMAL 0x01 // regular channel activated (bitmasked) 100 | #define OP_ACT_PERC 0x02 // percussion channel activated (bitmasked) 101 | 102 | #define BLOCKBUF_SIZE 512 103 | 104 | 105 | // vibrato constants 106 | #define VIBTAB_SIZE 8 107 | #define VIBFAC 70/50000 // no braces, integer mul/div 108 | 109 | // tremolo constants and table 110 | #define TREMTAB_SIZE 53 111 | #define TREM_FREQ ((fltype)(3.7)) // tremolo at 3.7hz 112 | 113 | 114 | /* operator struct definition 115 | For OPL2 all 9 channels consist of two operators each, carrier and modulator. 116 | Channel x has operators x as modulator and operators (9+x) as carrier. 117 | For OPL3 all 18 channels consist either of two operators (2op mode) or four 118 | operators (4op mode) which is determined through register4 of the second 119 | adlib register set. 120 | Only the channels 0,1,2 (first set) and 9,10,11 (second set) can act as 121 | 4op channels. The two additional operators for a channel y come from the 122 | 2op channel y+3 so the operatorss y, (9+y), y+3, (9+y)+3 make up a 4op 123 | channel. 124 | */ 125 | typedef struct operator_struct { 126 | Bit32s cval, lastcval; // current output/last output (used for feedback) 127 | Bit32u tcount, wfpos, tinc; // time (position in waveform) and time increment 128 | fltype amp, step_amp; // and amplification (envelope) 129 | fltype vol; // volume 130 | fltype sustain_level; // sustain level 131 | Bit32s mfbi; // feedback amount 132 | fltype a0, a1, a2, a3; // attack rate function coefficients 133 | fltype decaymul, releasemul; // decay/release rate functions 134 | Bit32u op_state; // current state of operator (attack/decay/sustain/release/off) 135 | Bit32u toff; 136 | Bit32s freq_high; // highest three bits of the frequency, used for vibrato calculations 137 | Bit16s* cur_wform; // start of selected waveform 138 | Bit32u cur_wmask; // mask for selected waveform 139 | Bit32u act_state; // activity state (regular, percussion) 140 | bool sus_keep; // keep sustain level when decay finished 141 | bool vibrato,tremolo; // vibrato/tremolo enable bits 142 | 143 | // variables used to provide non-continuous envelopes 144 | Bit32u generator_pos; // for non-standard sample rates we need to determine how many samples have passed 145 | Bits cur_env_step; // current (standardized) sample position 146 | Bits env_step_a,env_step_d,env_step_r; // number of std samples of one step (for attack/decay/release mode) 147 | Bit8u step_skip_pos_a; // position of 8-cyclic step skipping (always 2^x to check against mask) 148 | Bits env_step_skip_a; // bitmask that determines if a step is skipped (respective bit is zero then) 149 | 150 | #if defined(OPLTYPE_IS_OPL3) 151 | bool is_4op,is_4op_attached; // base of a 4op channel/part of a 4op channel 152 | Bit32s left_pan,right_pan; // opl3 stereo panning amount 153 | #endif 154 | } op_type; 155 | 156 | // per-chip variables 157 | Bitu chip_num; 158 | op_type op[MAXOPERATORS]; 159 | 160 | Bits int_samplerate; 161 | 162 | Bit8u status; 163 | Bit32u opl_index; 164 | #if defined(OPLTYPE_IS_OPL3) 165 | Bit8u adlibreg[512]; // adlib register set (including second set) 166 | Bit8u wave_sel[44]; // waveform selection 167 | #else 168 | Bit8u adlibreg[256]; // adlib register set 169 | Bit8u wave_sel[22]; // waveform selection 170 | #endif 171 | 172 | 173 | // vibrato/tremolo increment/counter 174 | Bit32u vibtab_pos; 175 | Bit32u vibtab_add; 176 | Bit32u tremtab_pos; 177 | Bit32u tremtab_add; 178 | 179 | 180 | // enable an operator 181 | void enable_operator(Bitu regbase, op_type* op_pt); 182 | 183 | // functions to change parameters of an operator 184 | void change_frequency(Bitu chanbase, Bitu regbase, op_type* op_pt); 185 | 186 | void change_attackrate(Bitu regbase, op_type* op_pt); 187 | void change_decayrate(Bitu regbase, op_type* op_pt); 188 | void change_releaserate(Bitu regbase, op_type* op_pt); 189 | void change_sustainlevel(Bitu regbase, op_type* op_pt); 190 | void change_waveform(Bitu regbase, op_type* op_pt); 191 | void change_keepsustain(Bitu regbase, op_type* op_pt); 192 | void change_vibrato(Bitu regbase, op_type* op_pt); 193 | void change_feedback(Bitu chanbase, op_type* op_pt); 194 | 195 | extern "C" void adlib_init(Bit32u samplerate); 196 | extern "C" void adlib_write(Bitu idx, Bit8u val); 197 | extern "C" void adlib_getsample(Bit16s* sndptr, Bits numsamples); 198 | 199 | // general functions 200 | void adlib_init(Bit32u samplerate); 201 | void adlib_write(Bitu idx, Bit8u val); 202 | void adlib_getsample(Bit16s* sndptr, Bits numsamples); 203 | 204 | Bitu adlib_reg_read(Bitu port); 205 | void adlib_write_index(Bitu port, Bit8u val); 206 | 207 | static Bit32u generator_add; // should be a chip parameter 208 | -------------------------------------------------------------------------------- /play.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #define IOW 0 6 | #define IOR 1 7 | #define AEN 22 8 | #define RESET 27 9 | 10 | #define ATA0 0x300 11 | #define ATA1 0x302 12 | #define ATA2 0x304 13 | #define ATA3 0x306 14 | #define ATA4 0x308 15 | #define ATA5 0x30A 16 | #define ATA6 0x30C 17 | #define ATA7 0x30E 18 | 19 | void setaddr(unsigned short addr) { 20 | digitalWrite(0x0C, addr & 1); addr >>= 1; 21 | digitalWrite(0x0D, addr & 1); addr >>= 1; 22 | digitalWrite(0x0E, addr & 1); addr >>= 1; 23 | digitalWrite(0x0F, addr & 1); addr >>= 1; 24 | digitalWrite(0x10, addr & 1); addr >>= 1; 25 | digitalWrite(0x11, addr & 1); addr >>= 1; 26 | digitalWrite(0x12, addr & 1); addr >>= 1; 27 | digitalWrite(0x13, addr & 1); addr >>= 1; 28 | digitalWrite(0x14, addr & 1); addr >>= 1; 29 | digitalWrite(0x15, addr & 1); 30 | } 31 | 32 | void setdata(unsigned char data) { 33 | digitalWrite(0x04, data & 1); data >>= 1; 34 | digitalWrite(0x05, data & 1); data >>= 1; 35 | digitalWrite(0x06, data & 1); data >>= 1; 36 | digitalWrite(0x07, data & 1); data >>= 1; 37 | digitalWrite(0x08, data & 1); data >>= 1; 38 | digitalWrite(0x09, data & 1); data >>= 1; 39 | digitalWrite(0x0A, data & 1); data >>= 1; 40 | digitalWrite(0x0B, data & 1); 41 | } 42 | 43 | unsigned char getdata() { 44 | unsigned char data; 45 | 46 | data = digitalRead(0x0B); data <<= 1; 47 | data |= digitalRead(0x0A); data <<= 1; 48 | data |= digitalRead(0x09); data <<= 1; 49 | data |= digitalRead(0x08); data <<= 1; 50 | data |= digitalRead(0x07); data <<= 1; 51 | data |= digitalRead(0x06); data <<= 1; 52 | data |= digitalRead(0x05); data <<= 1; 53 | data |= digitalRead(0x04); 54 | 55 | return data; 56 | } 57 | 58 | void setinput() { 59 | unsigned char i; 60 | for(i=0; i<8; i++) 61 | pinMode(i+4, INPUT); 62 | } 63 | 64 | void setoutput() { 65 | unsigned char i; 66 | for(i=0; i<8; i++) 67 | pinMode(i+4, OUTPUT); 68 | } 69 | 70 | unsigned char inb(unsigned short addr) { 71 | unsigned char data; 72 | 73 | setinput(); 74 | setaddr(addr); 75 | digitalWrite(IOR, 0); 76 | usleep(10); 77 | data = getdata(); 78 | digitalWrite(IOR, 1); 79 | usleep(10); 80 | 81 | return data; 82 | } 83 | 84 | void outb(unsigned short addr, unsigned char data) { 85 | setoutput(); 86 | setaddr(addr); 87 | setdata(data); 88 | digitalWrite(IOW, 0); 89 | usleep(10); 90 | digitalWrite(IOW, 1); 91 | usleep(10); 92 | } 93 | 94 | void wr_adlib(unsigned char reg, unsigned char value) { 95 | outb(0x388, reg); usleep(4); 96 | outb(0x389, value), usleep(23); 97 | } 98 | 99 | int main() { 100 | unsigned char buffer[57306]; 101 | int song_register, song_data, song_offset = 0, song_wait; 102 | FILE *f; 103 | int i; 104 | 105 | f = fopen("le.adl", "rb"); 106 | fread(buffer, 1, 57306, f); 107 | fclose(f); 108 | 109 | wiringPiSetupGpio(); 110 | 111 | pinMode(IOW, OUTPUT); 112 | pinMode(IOR, OUTPUT); 113 | pinMode(AEN, OUTPUT); 114 | pinMode(RESET, OUTPUT); 115 | digitalWrite(IOW, 1); 116 | digitalWrite(IOR, 1); 117 | digitalWrite(AEN, 0); 118 | digitalWrite(RESET, 1); usleep(1000); 119 | digitalWrite(RESET, 0); usleep(1000); 120 | 121 | // CONFIGURE ADDRESS PINS 122 | for(i=0; i<0x0A; i++) pinMode(i+12, OUTPUT); 123 | for(i=0; i<0x0A; i++) pullUpDnControl(i+12, PUD_DOWN); 124 | 125 | // CONFIGURE DATA PINS 126 | for(i=0; i<0x08; i++) pinMode(i+4, INPUT); 127 | for(i=0; i<0x08; i++) pullUpDnControl(i+4, PUD_DOWN); 128 | 129 | // PLAY THE LEMMINGS SONG USING ADLIB 130 | for(;;) 131 | { 132 | song_register = buffer[song_offset]; 133 | song_offset++; 134 | if(song_register==0) 135 | { 136 | song_wait = (buffer[song_offset+1] << 8) | buffer[song_offset+0]; 137 | song_offset += 2; 138 | usleep(1786*song_wait); 139 | } 140 | else 141 | { 142 | song_data = buffer[song_offset]; song_offset++; 143 | song_wait = buffer[song_offset]; song_offset++; 144 | wr_adlib(song_register, song_data); 145 | usleep(1786*song_wait); 146 | } 147 | if(song_offset>57300) 148 | { 149 | for(i=0; i<256; i++) 150 | wr_adlib(i, 0); 151 | exit(0); 152 | } 153 | } 154 | 155 | return 0; 156 | } 157 | -------------------------------------------------------------------------------- /read_xtcf.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #define IOW 0 6 | #define IOR 1 7 | #define AEN 22 8 | 9 | #define ATA0 0x300 10 | #define ATA1 0x302 11 | #define ATA2 0x304 12 | #define ATA3 0x306 13 | #define ATA4 0x308 14 | #define ATA5 0x30A 15 | #define ATA6 0x30C 16 | #define ATA7 0x30E 17 | 18 | void setaddr(unsigned short addr) { 19 | digitalWrite(0x0C, addr & 1); addr >>= 1; 20 | digitalWrite(0x0D, addr & 1); addr >>= 1; 21 | digitalWrite(0x0E, addr & 1); addr >>= 1; 22 | digitalWrite(0x0F, addr & 1); addr >>= 1; 23 | digitalWrite(0x10, addr & 1); addr >>= 1; 24 | digitalWrite(0x11, addr & 1); addr >>= 1; 25 | digitalWrite(0x12, addr & 1); addr >>= 1; 26 | digitalWrite(0x13, addr & 1); addr >>= 1; 27 | digitalWrite(0x14, addr & 1); addr >>= 1; 28 | digitalWrite(0x15, addr & 1); 29 | } 30 | 31 | void setdata(unsigned char data) { 32 | digitalWrite(0x04, data & 1); data >>= 1; 33 | digitalWrite(0x05, data & 1); data >>= 1; 34 | digitalWrite(0x06, data & 1); data >>= 1; 35 | digitalWrite(0x07, data & 1); data >>= 1; 36 | digitalWrite(0x08, data & 1); data >>= 1; 37 | digitalWrite(0x09, data & 1); data >>= 1; 38 | digitalWrite(0x0A, data & 1); data >>= 1; 39 | digitalWrite(0x0B, data & 1); 40 | } 41 | 42 | unsigned char getdata() { 43 | unsigned char data; 44 | 45 | data = digitalRead(0x0B); data <<= 1; 46 | data |= digitalRead(0x0A); data <<= 1; 47 | data |= digitalRead(0x09); data <<= 1; 48 | data |= digitalRead(0x08); data <<= 1; 49 | data |= digitalRead(0x07); data <<= 1; 50 | data |= digitalRead(0x06); data <<= 1; 51 | data |= digitalRead(0x05); data <<= 1; 52 | data |= digitalRead(0x04); 53 | 54 | return data; 55 | } 56 | 57 | void setinput() { 58 | unsigned char i; 59 | for(i=0; i<8; i++) 60 | pinMode(i+4, INPUT); 61 | } 62 | 63 | void setoutput() { 64 | unsigned char i; 65 | for(i=0; i<8; i++) 66 | pinMode(i+4, OUTPUT); 67 | } 68 | 69 | unsigned char inb(unsigned short addr) { 70 | unsigned char data; 71 | int i; 72 | 73 | setinput(); 74 | setaddr(addr); 75 | digitalWrite(IOR, 0); 76 | for(i=0; i<100; i++) 77 | data = getdata(); 78 | digitalWrite(IOR, 1); 79 | for(i=0; i<100; i++) 80 | 81 | return data; 82 | } 83 | 84 | void outb(unsigned short addr, unsigned char data) { 85 | int i; 86 | setoutput(); 87 | setaddr(addr); 88 | setdata(data); 89 | digitalWrite(IOW, 0); 90 | for(i=0; i<100; i++); 91 | digitalWrite(IOW, 1); 92 | for(i=0; i<100; i++); 93 | } 94 | 95 | int main() { 96 | int i; 97 | 98 | wiringPiSetupGpio(); 99 | 100 | pinMode(IOW, OUTPUT); 101 | pinMode(IOR, OUTPUT); 102 | pinMode(AEN, OUTPUT); 103 | digitalWrite(IOW, 1); 104 | digitalWrite(IOR, 1); 105 | digitalWrite(AEN, 0); 106 | 107 | // CONFIGURE ADDRESS PINS 108 | for(i=0; i<0x0A; i++) pinMode(i+12, OUTPUT); 109 | for(i=0; i<0x0A; i++) pullUpDnControl(i+12, PUD_DOWN); 110 | 111 | // CONFIGURE DATA PINS 112 | for(i=0; i<0x08; i++) pinMode(i+4, INPUT); 113 | for(i=0; i<0x08; i++) pullUpDnControl(i+4, PUD_DOWN); 114 | 115 | // CONFIGURE CF 8-BIT MODE 116 | outb(ATA1, 0x01); 117 | outb(ATA7, 0xEF); 118 | while((inb(ATA7)&0x80)!=0); 119 | 120 | // REQUEST DATA 121 | outb(ATA6, 0xA0|0x00); // HEAD 122 | outb(ATA2, 1); // SECTORS TO READ 123 | outb(ATA3, 1); // SECTOR (1-) 124 | outb(ATA4, 0); // lo(CYLINDER) 125 | outb(ATA5, 0); // hi(CYLINDER) 126 | outb(ATA7, 0x20); // READ 127 | while((inb(ATA7)&8)==0); 128 | 129 | // LOAD DATA 130 | for(i=0; i<512; i++) { 131 | printf("%.2x ", inb(ATA0)); 132 | if(i%24==23) printf("\n"); 133 | } 134 | printf("\n"); 135 | 136 | return 0; 137 | } 138 | -------------------------------------------------------------------------------- /schematic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eigenco/RPiISA/1f57fa4a2ca5f0cd25a7843db3d658d8adc595e6/schematic.png -------------------------------------------------------------------------------- /vga_working.c: -------------------------------------------------------------------------------- 1 | // gcc -O0 playvga.c -l wiringPi -o playvga 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #define LA 23 9 | #define IOW 25 10 | #define IOR 11 11 | #define MEMR 9 12 | #define MEMW 10 13 | #define RESET 22 14 | 15 | #define D0 27 16 | #define D1 18 17 | #define D2 17 18 | #define D3 15 19 | #define D4 14 20 | #define D5 4 21 | #define D6 3 22 | #define D7 2 23 | 24 | #define A0 21 25 | #define A1 20 26 | #define A2 26 27 | #define A3 16 28 | #define A4 19 29 | #define A5 13 30 | #define A6 12 31 | #define A7 6 32 | #define A8 5 33 | #define A9 1 34 | #define A10 0 35 | #define A11 7 36 | 37 | #define ATA0 0x300 38 | #define ATA1 0x302 39 | #define ATA2 0x304 40 | #define ATA3 0x306 41 | #define ATA4 0x308 42 | #define ATA5 0x30A 43 | #define ATA6 0x30C 44 | #define ATA7 0x30E 45 | 46 | void setaddr(unsigned short addr) { 47 | digitalWrite(A0, addr & 1); addr >>= 1; 48 | digitalWrite(A1, addr & 1); addr >>= 1; 49 | digitalWrite(A2, addr & 1); addr >>= 1; 50 | digitalWrite(A3, addr & 1); addr >>= 1; 51 | digitalWrite(A4, addr & 1); addr >>= 1; 52 | digitalWrite(A5, addr & 1); addr >>= 1; 53 | digitalWrite(A6, addr & 1); addr >>= 1; 54 | digitalWrite(A7, addr & 1); addr >>= 1; 55 | digitalWrite(A8, addr & 1); addr >>= 1; 56 | digitalWrite(A9, addr & 1); addr >>= 1; 57 | digitalWrite(A10, addr & 1); addr >>= 1; 58 | digitalWrite(A11, addr & 1); 59 | } 60 | 61 | void setdata(unsigned char data) { 62 | digitalWrite(D0, data & 1); data >>= 1; 63 | digitalWrite(D1, data & 1); data >>= 1; 64 | digitalWrite(D2, data & 1); data >>= 1; 65 | digitalWrite(D3, data & 1); data >>= 1; 66 | digitalWrite(D4, data & 1); data >>= 1; 67 | digitalWrite(D5, data & 1); data >>= 1; 68 | digitalWrite(D6, data & 1); data >>= 1; 69 | digitalWrite(D7, data & 1); 70 | } 71 | 72 | unsigned char getdata() { 73 | unsigned char data; 74 | 75 | data = digitalRead(D7); data <<= 1; 76 | data |= digitalRead(D6); data <<= 1; 77 | data |= digitalRead(D5); data <<= 1; 78 | data |= digitalRead(D4); data <<= 1; 79 | data |= digitalRead(D3); data <<= 1; 80 | data |= digitalRead(D2); data <<= 1; 81 | data |= digitalRead(D1); data <<= 1; 82 | data |= digitalRead(D0); 83 | 84 | return data; 85 | } 86 | 87 | void setinput() { 88 | pinMode(D0, INPUT); 89 | pinMode(D1, INPUT); 90 | pinMode(D2, INPUT); 91 | pinMode(D3, INPUT); 92 | pinMode(D4, INPUT); 93 | pinMode(D5, INPUT); 94 | pinMode(D6, INPUT); 95 | pinMode(D7, INPUT); 96 | } 97 | 98 | void setoutput() { 99 | pinMode(D0, OUTPUT); 100 | pinMode(D1, OUTPUT); 101 | pinMode(D2, OUTPUT); 102 | pinMode(D3, OUTPUT); 103 | pinMode(D4, OUTPUT); 104 | pinMode(D5, OUTPUT); 105 | pinMode(D6, OUTPUT); 106 | pinMode(D7, OUTPUT); 107 | } 108 | 109 | unsigned char inb(unsigned short addr) { 110 | unsigned char data; 111 | 112 | setinput(); 113 | setaddr(addr); 114 | digitalWrite(IOR, 0); usleep(1); 115 | data = getdata(); 116 | digitalWrite(IOR, 1); usleep(1); 117 | 118 | return data; 119 | } 120 | 121 | void outb(unsigned short addr, unsigned char data) { 122 | setoutput(); 123 | setaddr(addr); 124 | setdata(data); 125 | digitalWrite(IOW, 0); usleep(1); 126 | digitalWrite(IOW, 1); usleep(1); 127 | } 128 | 129 | void memw(unsigned int addr, unsigned char data) { 130 | int i; 131 | 132 | setoutput(); 133 | setaddr((addr >> 12) & 0xFF); 134 | digitalWrite(LA, 1); 135 | digitalWrite(LA, 0); 136 | setaddr(addr & 0xFFF); 137 | setdata(data); 138 | digitalWrite(MEMW, 0); for(i=0; i<256; i++); 139 | digitalWrite(MEMW, 1); for(i=0; i<256; i++); 140 | } 141 | 142 | unsigned char memr(unsigned int addr) { 143 | unsigned char data, l; 144 | 145 | setinput(); 146 | setaddr((addr >> 12) & 0xFF); 147 | digitalWrite(LA, 1); 148 | digitalWrite(LA, 0); 149 | setaddr(addr & 0xFFF); 150 | digitalWrite(MEMR, 0); usleep(1); 151 | data = getdata(); 152 | digitalWrite(MEMR, 1); usleep(1); 153 | 154 | return data; 155 | } 156 | 157 | 158 | void wr_adlib(unsigned char reg, unsigned char value) { 159 | outb(0x388, reg); 160 | outb(0x389, value); 161 | } 162 | 163 | void init_vga(void) { 164 | unsigned int i; 165 | 166 | // ET4000: set key 167 | outb(0x3bf, 3); 168 | outb(0x3d8, 0xa0); 169 | usleep(100000); 170 | 171 | // ET4000: set clocks 172 | outb(0x3c4, 0x07); 173 | outb(0x3c5, 0xfc); 174 | usleep(100000); 175 | 176 | // MISC register at port 3c2 177 | outb(0x3c2, 0x63); 178 | 179 | // ATC registers at port 3c0 180 | for(i=0; i<0x10; i++) { 181 | inb(0x3da); 182 | outb(0x3c0, i); 183 | outb(0x3c0, i); 184 | } 185 | outb(0x3c0, 0x30); outb(0x3c0, 0x41); 186 | outb(0x3c0, 0x31); outb(0x3c0, 0x00); 187 | outb(0x3c0, 0x32); outb(0x3c0, 0x0f); 188 | outb(0x3c0, 0x33); outb(0x3c0, 0x00); 189 | outb(0x3c0, 0x34); outb(0x3c0, 0x00); 190 | 191 | // SEQ registers at port 3c4 192 | outb(0x3c4, 0x00); outb(0x3c5, 0x03); 193 | outb(0x3c4, 0x01); outb(0x3c5, 0x01); 194 | outb(0x3c4, 0x02); outb(0x3c5, 0x0f); 195 | outb(0x3c4, 0x03); outb(0x3c5, 0x00); 196 | outb(0x3c4, 0x04); outb(0x3c5, 0x0e); 197 | 198 | // GDC registers at port 3ce 199 | outb(0x3ce, 0x00); outb(0x3cf, 0x00); 200 | outb(0x3ce, 0x01); outb(0x3cf, 0x00); 201 | outb(0x3ce, 0x02); outb(0x3cf, 0x00); 202 | outb(0x3ce, 0x03); outb(0x3cf, 0x00); 203 | outb(0x3ce, 0x04); outb(0x3cf, 0x00); 204 | outb(0x3ce, 0x05); outb(0x3cf, 0x40); 205 | outb(0x3ce, 0x06); outb(0x3cf, 0x05); 206 | outb(0x3ce, 0x07); outb(0x3cf, 0x0f); 207 | outb(0x3ce, 0x08); outb(0x3cf, 0xff); 208 | 209 | // CRTC registers at port 3d4 210 | outb(0x3d4, 0x11); outb(0x3d5, 0x00); 211 | outb(0x3d4, 0x00); outb(0x3d5, 0x5f); 212 | outb(0x3d4, 0x01); outb(0x3d5, 0x4f); 213 | outb(0x3d4, 0x02); outb(0x3d5, 0x50); 214 | outb(0x3d4, 0x03); outb(0x3d5, 0x82); 215 | outb(0x3d4, 0x04); outb(0x3d5, 0x54); 216 | outb(0x3d4, 0x05); outb(0x3d5, 0x80); 217 | outb(0x3d4, 0x06); outb(0x3d5, 0xbf); 218 | outb(0x3d4, 0x07); outb(0x3d5, 0x1f); 219 | outb(0x3d4, 0x08); outb(0x3d5, 0x00); 220 | outb(0x3d4, 0x09); outb(0x3d5, 0x41); 221 | outb(0x3d4, 0x0a); outb(0x3d5, 0x00); 222 | outb(0x3d4, 0x0b); outb(0x3d5, 0x00); 223 | outb(0x3d4, 0x0c); outb(0x3d5, 0x00); 224 | outb(0x3d4, 0x0d); outb(0x3d5, 0x00); 225 | outb(0x3d4, 0x0e); outb(0x3d5, 0x00); 226 | outb(0x3d4, 0x0f); outb(0x3d5, 0x00); 227 | outb(0x3d4, 0x10); outb(0x3d5, 0x9c); 228 | outb(0x3d4, 0x11); outb(0x3d5, 0x8e); 229 | outb(0x3d4, 0x12); outb(0x3d5, 0x8f); 230 | outb(0x3d4, 0x13); outb(0x3d5, 0x28); 231 | outb(0x3d4, 0x14); outb(0x3d5, 0x40); 232 | outb(0x3d4, 0x15); outb(0x3d5, 0x96); 233 | outb(0x3d4, 0x16); outb(0x3d5, 0xb9); 234 | outb(0x3d4, 0x17); outb(0x3d5, 0xa3); 235 | outb(0x3d4, 0x18); outb(0x3d5, 0xff); 236 | 237 | /* Enable video */ 238 | outb(0x3c0, 0x20); 239 | inb(0x3da); 240 | usleep(100000); 241 | } 242 | 243 | int main() { 244 | unsigned char buffer[57306]; 245 | int song_register, song_data, song_offset = 0, song_wait; 246 | FILE *f; 247 | int i, j, k; 248 | int x, y, z; 249 | 250 | f = fopen("le.adl", "rb"); 251 | fread(buffer, 1, 57306, f); 252 | fclose(f); 253 | 254 | wiringPiSetupGpio(); 255 | 256 | pinMode(LA, OUTPUT); 257 | pinMode(IOW, OUTPUT); 258 | pinMode(IOR, OUTPUT); 259 | pinMode(MEMW, OUTPUT); 260 | pinMode(MEMR, OUTPUT); 261 | pinMode(RESET, OUTPUT); 262 | digitalWrite(IOW, 1); 263 | digitalWrite(IOR, 1); 264 | digitalWrite(MEMW, 1); 265 | digitalWrite(MEMR, 1); 266 | 267 | // CONFIGURE ADDRESS PINS 268 | pinMode(A0, OUTPUT); 269 | pinMode(A1, OUTPUT); 270 | pinMode(A2, OUTPUT); 271 | pinMode(A3, OUTPUT); 272 | pinMode(A4, OUTPUT); 273 | pinMode(A5, OUTPUT); 274 | pinMode(A6, OUTPUT); 275 | pinMode(A7, OUTPUT); 276 | pinMode(A8, OUTPUT); 277 | pinMode(A9, OUTPUT); 278 | pinMode(A10, OUTPUT); 279 | pinMode(A11, OUTPUT); 280 | 281 | // CONFIGURE DATA PINS 282 | pinMode(D0, INPUT); 283 | pinMode(D1, INPUT); 284 | pinMode(D2, INPUT); 285 | pinMode(D3, INPUT); 286 | pinMode(D4, INPUT); 287 | pinMode(D5, INPUT); 288 | pinMode(D6, INPUT); 289 | pinMode(D7, INPUT); 290 | 291 | // TEST MEM 292 | for(i=0; i<256; i++) memw(0xA0000+i, i); 293 | 294 | // RESET 295 | digitalWrite(RESET, 1); usleep(100000); 296 | digitalWrite(RESET, 0); usleep(500000); 297 | 298 | init_vga(); 299 | 300 | /* set palette */ 301 | outb(0x3c6, 0xff); // PEL mask 302 | outb(0x3c8, 0); // Palette register 303 | for(i=0; i<64; i++) { 304 | outb(0x3c9, i & 63); 305 | outb(0x3c9, 0); 306 | outb(0x3c9, 0); 307 | } 308 | for(i=0; i<64; i++) { 309 | outb(0x3c9, 0); 310 | outb(0x3c9, i & 63); 311 | outb(0x3c9, 0); 312 | } 313 | for(i=0; i<64; i++) { 314 | outb(0x3c9, 0); 315 | outb(0x3c9, 0); 316 | outb(0x3c9, i & 63); 317 | } 318 | for(i=0; i<64; i++) { 319 | outb(0x3c9, i & 63); 320 | outb(0x3c9, i & 63); 321 | outb(0x3c9, i & 63); 322 | } 323 | 324 | printf("VMEM test:\n"); 325 | i=0; 326 | srand(time(0)); 327 | for(y=0; y<16; y++) 328 | for(x=0; x<16; x++) 329 | memw(0xA0000 + i++, rand()%256); 330 | i=0; 331 | for(y=0; y<16; y++) { 332 | for(x=0; x<16; x++) 333 | printf("%.2x ", memr(0xA0000 + i++)); 334 | printf("\n"); 335 | } 336 | printf("\n"); 337 | 338 | for(y=0; y<150; y++) 339 | for(x=0; x<320; x++) 340 | memw(0xA0000 + x + y*320, (x & 63) + 64*((y >> 3)& 3)); 341 | 342 | for(;;) 343 | for(y=150; y<200; y++) 344 | for(x=0; x<320; x++) 345 | memw(0xA0000 + x + y*320, rand()%256); 346 | 347 | return 0; 348 | } 349 | -------------------------------------------------------------------------------- /vgamem.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #define FW 100 9 | #define IOW 0 10 | #define IOR 1 11 | #define MEMW 2 12 | #define MEMR 3 13 | #define AEN 22 14 | #define A11 23 15 | #define A10 24 16 | #define LA 25 17 | #define RESET 27 18 | 19 | void setaddr(unsigned int addr) { 20 | digitalWrite(0x0C, addr & 1); addr >>= 1; 21 | digitalWrite(0x0D, addr & 1); addr >>= 1; 22 | digitalWrite(0x0E, addr & 1); addr >>= 1; 23 | digitalWrite(0x0F, addr & 1); addr >>= 1; 24 | digitalWrite(0x10, addr & 1); addr >>= 1; 25 | digitalWrite(0x11, addr & 1); addr >>= 1; 26 | digitalWrite(0x12, addr & 1); addr >>= 1; 27 | digitalWrite(0x13, addr & 1); addr >>= 1; 28 | digitalWrite(0x14, addr & 1); addr >>= 1; 29 | digitalWrite(0x15, addr & 1); addr >>= 1; 30 | digitalWrite(A10, addr & 1); addr >>= 1; 31 | digitalWrite(A11, addr & 1); 32 | } 33 | 34 | void setdata(unsigned char data) { 35 | digitalWrite(0x04, data & 1); data >>= 1; 36 | digitalWrite(0x05, data & 1); data >>= 1; 37 | digitalWrite(0x06, data & 1); data >>= 1; 38 | digitalWrite(0x07, data & 1); data >>= 1; 39 | digitalWrite(0x08, data & 1); data >>= 1; 40 | digitalWrite(0x09, data & 1); data >>= 1; 41 | digitalWrite(0x0A, data & 1); data >>= 1; 42 | digitalWrite(0x0B, data & 1); 43 | } 44 | 45 | unsigned char getdata() { 46 | unsigned char data; 47 | 48 | data = digitalRead(0x0B); data <<= 1; 49 | data |= digitalRead(0x0A); data <<= 1; 50 | data |= digitalRead(0x09); data <<= 1; 51 | data |= digitalRead(0x08); data <<= 1; 52 | data |= digitalRead(0x07); data <<= 1; 53 | data |= digitalRead(0x06); data <<= 1; 54 | data |= digitalRead(0x05); data <<= 1; 55 | data |= digitalRead(0x04); 56 | 57 | return data; 58 | } 59 | 60 | void setinput() { 61 | unsigned char i; 62 | for(i=0; i<8; i++) 63 | pinMode(i+4, INPUT); 64 | } 65 | 66 | void setoutput() { 67 | unsigned char i; 68 | for(i=0; i<8; i++) 69 | pinMode(i+4, OUTPUT); 70 | } 71 | 72 | unsigned char inb(unsigned short addr) { 73 | unsigned char data; 74 | int i; 75 | 76 | setinput(); 77 | setaddr(addr); 78 | digitalWrite(IOR, 0); 79 | for(i=0; i> 12) & 0xFF); 100 | digitalWrite(LA, 1); 101 | digitalWrite(LA, 0); 102 | setaddr(addr & 0xFFF); 103 | setdata(data); 104 | digitalWrite(MEMW, 0); 105 | for(i=0; i> 12) & 0xFF); 115 | digitalWrite(LA, 1); 116 | digitalWrite(LA, 0); 117 | setaddr(addr & 0xFFF); 118 | digitalWrite(MEMR, 0); 119 | for(i=0; i> 3)& 3)); 278 | 279 | for(y=0; y<64; y++) 280 | for(x=32000; x<64000; x++) 281 | memw(0xA0000 + x, rand() & 255); 282 | 283 | printf("VMEM test:\n"); 284 | i=0; 285 | for(y=0; y<16; y++) { 286 | for(x=0; x<16; x++) 287 | printf("%.2x ", memr(0xA0000 + i++)); 288 | printf("\n"); 289 | } 290 | printf("\n"); 291 | 292 | return 0; 293 | } 294 | --------------------------------------------------------------------------------