├── .gitattributes ├── .gitignore ├── .gitmodules ├── INSTALL.md ├── LICENSE ├── README.md ├── docs └── posts │ ├── 2021-09-bootstrapping_with_arduino.md │ └── images │ ├── 2021-09-68k-SBC-wide.jpg │ ├── 2021-09-68k-breadboard-minimal.jpg │ ├── 2021-09-68k-breadboard-serial.jpg │ ├── 2021-09-68k-breadboard-top.jpg │ ├── 2021-09-Z80-breadboard-with-memory-analyzer.jpg │ ├── 2021-09-Z80-breadboard-with-memory.jpg │ ├── 2021-09-Z80-breadboard.jpg │ ├── 2021-09-Z80-full-system.jpg │ └── 2021-09-arduino-with-memory-chip.jpg ├── hardware ├── 68k-SBC │ ├── 68kBoard-cache.lib │ ├── 68kBoard.kicad_pcb │ ├── 68kBoard.kicad_prl │ ├── 68kBoard.kicad_pro │ ├── 68kBoard.kicad_sch │ ├── 68kBoard.pdf │ ├── Memory.kicad_sch │ ├── README.md │ ├── UART.kicad_sch │ ├── revisions │ │ ├── 68kBoard-rev0-errata.txt │ │ ├── 68kBoard-rev0.pdf │ │ ├── 68kBoard-rev0.zip │ │ ├── 68kBoard-rev2-errata.txt │ │ ├── 68kBoard-rev2.pdf │ │ └── 68kBoard-rev2.zip │ └── sym-lib-table ├── 68k-SMT │ ├── 68k-SMT-cache.lib │ ├── 68k-SMT.kicad_pcb │ ├── 68k-SMT.kicad_prl │ ├── 68k-SMT.kicad_pro │ ├── 68k-SMT.kicad_sch │ ├── 68k-SMT.pdf │ ├── CompactFlash.kicad_sch │ ├── Memory.kicad_sch │ ├── README.md │ ├── UART.kicad_sch │ ├── fp-lib-table │ ├── revisions │ │ ├── 68k-SMT-rev1-errata.txt │ │ ├── 68k-SMT-rev1.pdf │ │ └── 68k-SMT-rev1.zip │ └── sym-lib-table ├── 68k-Supervisor │ ├── 68kBoardSupervisorShield-cache.lib │ ├── 68kBoardSupervisorShield.kicad_pcb │ ├── 68kBoardSupervisorShield.kicad_prl │ ├── 68kBoardSupervisorShield.kicad_pro │ ├── 68kBoardSupervisorShield.kicad_sch │ ├── 68kBoardSupervisorShield.pdf │ ├── README.md │ ├── arduino-kicad-library │ │ ├── .gitignore │ │ ├── Arduino.pretty │ │ │ ├── Arduino_101_Shield.kicad_mod │ │ │ ├── Arduino_Due_Shield.kicad_mod │ │ │ ├── Arduino_Leonardo_Shield.kicad_mod │ │ │ ├── Arduino_Mega2560_Shield.kicad_mod │ │ │ ├── Arduino_Micro_Socket.kicad_mod │ │ │ ├── Arduino_Mini_Socket.kicad_mod │ │ │ ├── Arduino_Nano_Socket.kicad_mod │ │ │ ├── Arduino_Uno_Shield.kicad_mod │ │ │ └── Arduino_Zero_Shield.kicad_mod │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── arduino.dcm │ │ └── arduino.lib │ ├── fp-lib-table │ ├── revisions │ │ ├── 68kBoardSupervisorShield-rev0.pdf │ │ ├── 68kBoardSupervisorShield-rev0.zip │ │ ├── 68kBoardSupervisorShield-rev2.pdf │ │ └── 68kBoardSupervisorShield-rev2.zip │ └── sym-lib-table ├── Z80-NQC │ ├── README.md │ ├── Z80Monitor │ │ ├── Makefile │ │ ├── crt0.asm │ │ ├── main.c │ │ ├── memtest.asm │ │ └── welcome.asm │ ├── Z80Proto │ │ ├── Z80Proto.kicad_pcb │ │ ├── Z80Proto.kicad_prl │ │ ├── Z80Proto.kicad_pro │ │ ├── Z80Proto.kicad_sch │ │ ├── Z80Proto.png │ │ ├── Z80Proto.svg │ │ ├── revisions │ │ │ └── Z80Proto-rev0.zip │ │ └── sym-lib-table │ ├── Z80Supervisor │ │ └── Z80Supervisor.ino │ └── images │ │ ├── Z80-NCQ-Board-Back.jpg │ │ ├── Z80-NCQ-Board-Front.jpg │ │ └── Z80-NCQ-Built.jpg └── k30-SBC │ ├── Bus.kicad_sch │ ├── IO.kicad_sch │ ├── Logic.kicad_sch │ ├── Memory-cache.lib │ ├── Memory.kicad_sch │ ├── README.md │ ├── fp-lib-table │ ├── k30-SBC.kicad_pcb │ ├── k30-SBC.kicad_prl │ ├── k30-SBC.kicad_pro │ ├── k30-SBC.kicad_sch │ ├── k30-SBC.pdf │ ├── revisions │ ├── k30-SBC-rev1-errata.txt │ ├── k30-SBC-rev1.pdf │ ├── k30-SBC-rev1.zip │ ├── k30-SBC-rev2-errata.txt │ ├── k30-SBC-rev2.pdf │ └── k30-SBC-rev2.zip │ └── sym-lib-table ├── images ├── 68k-SBC-rev0 │ ├── ArduinoShield-back.jpg │ ├── ArduinoShield-front.jpg │ ├── PCB-back.jpg │ ├── PCB-front.jpg │ ├── PCB-patch.jpg │ ├── SBC-nochips.jpg │ ├── SBC-wide.jpg │ └── SBC.jpg ├── 68k-SBC-rev2 │ ├── ArduinoShield.jpg │ ├── PCBs.jpg │ ├── SBC-full.jpg │ ├── SBC-running.jpg │ └── SBC.jpg ├── 68k-SMT-rev1 │ ├── PCB-bottom.jpg │ ├── PCB-top.jpg │ ├── SMT-back.jpg │ ├── SMT-running.jpg │ └── SMT.jpg ├── Breadboard-cpu.jpg ├── Breadboard-serial.jpg ├── OS-basic.gif ├── OS-booting.gif ├── k30-SBC-rev1 │ ├── k30-PCBs.jpg │ ├── k30-SBC-running.jpg │ ├── k30-SBC.jpg │ ├── k30-sbc-a4-long.png │ ├── k30-sbc-a4-short.png │ └── k30-sbc-a9.png └── k30-SBC-rev2 │ ├── board-top.jpg │ ├── pcb-bottom.jpg │ └── pcb-top.jpg ├── log.txt ├── notes.txt ├── software ├── arduino │ ├── 68kSupervisor │ │ └── 68kSupervisor.ino │ ├── FlashTest │ │ └── FlashTest.ino │ ├── MemTest │ │ └── MemTest.ino │ └── k30FlashWriter │ │ └── k30FlashWriter.ino ├── monitor │ ├── Makefile │ ├── crt0.s │ ├── monitor.c │ ├── monitor.ld │ ├── tty_68681.c │ ├── tty_arduino.c │ └── vectors.c ├── tools │ ├── load.py │ ├── make-load-file │ └── make-send-file └── welcome.s └── todo.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | *.h linguist-language=C 2 | *.ino -linguist-detectable 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Editor Files 2 | .*.sw? 3 | .local.vimrc 4 | session.vim 5 | 6 | # Source Output Files 7 | *.o 8 | *.a 9 | *.bin 10 | *.elf 11 | *.hex 12 | *.noi 13 | *.lst 14 | *.rel 15 | *.sym 16 | *.load 17 | *.send 18 | 19 | # EDA Output Files 20 | *.gbr 21 | *.drl 22 | *gbrjob 23 | *-bak 24 | *.bak 25 | *.bck 26 | fp-info-cache 27 | hardware/**/*-backups 28 | 29 | # Binary files 30 | *.img 31 | 32 | # Build Directory 33 | /build/ 34 | 35 | # Miscellaneous 36 | /junk/ 37 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "hardware/kicad-libraries/computie-kicad-library"] 2 | path = hardware/kicad-libraries/computie-kicad-library 3 | url = git@github.com:transistorfet/computie-kicad-library.git 4 | [submodule "software/gloworm"] 5 | path = software/gloworm 6 | url = git@github.com:transistorfet/gloworm.git 7 | -------------------------------------------------------------------------------- /INSTALL.md: -------------------------------------------------------------------------------- 1 | 2 | Building and Bootstrapping A Computie Board 3 | =========================================== 4 | 5 | If you ever build one of these boards, please drop me a line and maybe send me some pictures (links 6 | on [jabberwocky.ca](https://jabberwocky.ca/). I'd love to hear about how it goes, or what you've 7 | manage to do with it. 8 | 9 | 10 | Building the Boards 11 | ------------------- 12 | 13 | The gerber files for each revision are in the hardware directory for each board under `revisions/`, 14 | along with an Errata file that might be useful to read. Only 68k-SBC Rev.2, 68k-SMT Rev.1, and 15 | k30-SBC Rev.2 should be built. The earlier revisions have known issues that make the boards 16 | unusable. 17 | 18 | 19 | Initializing A 68k-* Board 20 | -------------------------- 21 | 22 | For the boards with removable flash chips, they can be programmed externally using a generic chip 23 | programmer, but I usually use an Arduino Mega with the 68k Supervisor shield, and ribbon cables to 24 | connect it to the board. Using the 68k Supervisor sketch in `software/arduino/68kSupervisor`, and 25 | compiling the monitor.bin target, the monitor can be written to the flash chips in-circuit. 26 | 27 | It's also possible to use the supervisor to host the monitor directly, with the arduino intercepting 28 | bus cycles, but that requires the clock speed to be 10MHz or lower, or else it won't have time to 29 | stop the cycle and booting will fail. The jumpers on the board also need to be set, so that the 30 | flash memory is mapped into the region at `0x200000` instead of `0x000000`, and the DTACK needs to 31 | be disabled so that the arduino can provided in when it eventually catches up. Using the arduino 32 | hosting is much slower than the flash, but can help diagnose problems. 33 | 34 | To compile the monitor: 35 | ```sh 36 | cd software/ 37 | make monitor.bin 38 | ``` 39 | 40 | This will create both a monitor.bin, and output.txt, which is a C-compatible copy of the binary that 41 | is included by the Supervisor sketch. Whatever code is in output.txt will be hosted at address 0, 42 | or will be written to flash. 43 | 44 | From the arduino serial monitor, to erase the flash, write the monitor image, and verify the 45 | resulting memory, run the following commands: 46 | ```sh 47 | erase 48 | send 49 | verify 50 | ``` 51 | 52 | 53 | Initializing A k30-SBC 54 | ---------------------- 55 | 56 | The k30 requires a modified Arduino shield with the A0, DS, and DSACK1 signals added to additional 57 | Arduino I/O pins. Only the lower 8-bits of the data bus are used, so the extended header on the 58 | board can be left unconnected. I will eventually make a new version of the shield PCB. It also 59 | requires the k30FlashWriter sketch instead, which can write the flash chip in memory, but does not 60 | have the ability to debug or host anymore. That feature doesn't work at 12MHz and the 68030 61 | technically should have a >12.5MHz clock, according to the specs, so I removed it. 62 | 63 | The process is otherwise the same as for the 68k-* boards 64 | 65 | 66 | Connecting to the Monitor 67 | ------------------------- 68 | 69 | To connect to the monitor, attach a TTL-level serial converter to the first serial port header and 70 | connect with any serial terminal program. I use a 5V FTDI-in-cable serial-to-USB adapter, which is 71 | similar to [this one](https://www.sparkfun.com/products/9718), and I use `miniterm` on my desktop, 72 | which is provided by the `python3-serial` package. 73 | 74 | ```sh 75 | pyserial-miniterm /dev/ttyUSB0 38400 76 | ``` 77 | 78 | If it works, you should see it print the welcome message, and the prompt, after pressing the reset 79 | button. The prompt will appear every time you press enter in the terminal. 80 | ``` 81 | Welcome to the 68k Monitor! 82 | 83 | > 84 | ``` 85 | 86 | Loading Over Serial 87 | ------------------- 88 | 89 | Once the board has been initialized and can boot the monitor from flash, it's possible to send 90 | programs over the serial port. The binaries can be compiled using the `.load` extension as the 91 | target, which will generate a text file that contains the load command, the length of data, and the 92 | data encoded as hexadecimal in ASCII. It can be sent over serial with the python script in 93 | `tools/`, while the terminal is open. This allows you to see the command start. The data itself 94 | will not be echoed back to the terminal so it will appear to hang until the file has been 95 | transferred. 96 | 97 | On the desktop: 98 | ```sh 99 | make monitor.load 100 | python3 tools/load.py monitor.load 101 | ``` 102 | 103 | There is an option to `load.py` to limit the speed of transfer using `-l`, which is necessary if the 104 | CTS/DTR signals are not working properly. 105 | 106 | Once the file is complete, the load script will usually include a boot command that will 107 | automatically jump to the location where the file was loaded. You can check if the monitor is 108 | running in RAM at `0x100000` (the default load location) or Flash memory at `0x000000` by using the 109 | `info` command to see where the PC is pointing to. 110 | 111 | 112 | Updating the Monitor 113 | -------------------- 114 | 115 | It's possible to update the monitor in memory, by loading a new copy of the monitor over serial into 116 | RAM and running it. If the monitor is running in RAM, it's (semi)-safe to erase the flash, and 117 | write the copy of the monitor in RAM into Flash. This can render the board unbootable, but the 118 | Supervisor or external flash writer can be used to fix that. 119 | 120 | To erase the monitor in Flash and write a new copy, in the monitor running in RAM run the following: 121 | ```sh 122 | eraserom 123 | writerom 124 | verifyrom 125 | ``` 126 | 127 | 128 | Running the Kernel 129 | ------------------ 130 | 131 | To compile the kernel, run: 132 | ```sh 133 | make kernel.load 134 | ``` 135 | 136 | It can be sent over serial like the monitor. You might want to modify the kernel configuration in 137 | `gloworm/src/kernel/main.c` if you're using a board without the CompactFlash card, or you don't want 138 | to use networking. 139 | 140 | 141 | Building A FlashCard Root Image 142 | ------------------------------- 143 | 144 | The image can be built using a loopback device and following make commands: 145 | ```sh 146 | make create-image 147 | make mount-image 148 | make build-system 149 | make umount-image 150 | ``` 151 | Which will produce a 20MB disk image in `minix-build.img` using the `build/` directory as the 152 | mountpoint, and the minix1 filesystem. It does not include a partition table, so that needs to be 153 | created on the flash drive by other means. It can be written to the partition-specific block device 154 | file using `dd` on a unix-like desktop. 155 | 156 | In order to boot off the CompactFlash directly, the `boot.load` script can be loaded over serial and 157 | written to an alternate location such as `0x020000`. It must be a location that is outside of the 158 | Flash chip's sector in which monitor is written, or else the system will be unbootable. The 159 | boot.bin image doesn't contain a vector table like the monitor.bin image does. 160 | 161 | After sending the `boot.load` file over serial, without running it, in the monitor, run the 162 | following: 163 | ```sh 164 | eraserom 20000 165 | writerom 20000 166 | verifyrom 20000 167 | ``` 168 | 169 | You can then boot from the monitor at any time by running: 170 | ```sh 171 | boot 20000 172 | ``` 173 | 174 | The bootloader will print a period character for every 1K of the kernel image loaded from the disk 175 | into RAM, and then it will run the kernel after. If it works, you should see the heartbeat LED 176 | flashing to indicate the kernel is running and multiprocessing is enabled and switching. 177 | 178 | 179 | Configuring Networking 180 | ---------------------- 181 | 182 | If the second serial port is connected to a desktop, it will act like a SLIP connection, which can 183 | be bridged to the desktop's network, where `/dev/ttyUSB1` is the serial device connected to the 184 | second serial port of the board, and `192.168.1.x` is the local network, and enp3s0 is the 185 | internet-connected network interface on the linux desktop: 186 | 187 | ```sh 188 | sudo slattach -s 38400 -p slip /dev/ttyUSB1 189 | sudo ifconfig sl0 192.168.1.2 pointopoint 192.168.1.200 up 190 | # (this is automatically added on my machine, but might be required) sudo route add -host 192.168.1.200 sl0 191 | sudo arp -Ds 192.168.1.200 enp3s0 pub 192 | sudo iptables -A FORWARD -i sl0 -j ACCEPT 193 | sudo iptables -A FORWARD -o sl0 -j ACCEPT 194 | sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" 195 | ``` 196 | 197 | The device will have IP `192.168.1.200` which also needs to be configured in the kernel's 198 | `gloworm/src/kernel/main.c` function at the bottom. 199 | 200 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | Computie68k 3 | =========== 4 | 5 | ###### *Started October 03, 2019* 6 | 7 | Computie is a series of single board computers using the 68010 and 68030 CPUs, along with a simple unix-like 8 | operating system written in C, with preemptive multitasking via a timer interrupt provided by the 68681 9 | serial port controller that is common to all boards. 10 | 11 | k30-SBC is the newest board, using a surface-mount 68030 CPU, 2MB of Static RAM, 512KB of Flash for the boot 12 | software and monitor program, and a CompactFlash slot. 13 | 14 | 68k-SBC is a single board computer with a 68010 CPU, 1MB SRAM, 1MB Flash, and a 68681 Dual UART controller. 15 | 16 | 68k-SMT is a mostly identical design using SMT and PLCC components. A CompactFlash card slot has been added 17 | to this version, but it is also possible to connect a simple breadboarded version to 68k-SBC. 18 | 19 | For more details on how I got up and running, check out [Bootstrapping a Homebuilt Computer Using An Arduino](https://transistorfet.github.io/posts/2021-09-bootstrapping_with_arduino.html) 20 | 21 | For instructions on getting a board set up and software compiled, check out [INSTALL.md](https://github.com/transistorfet/computie/blob/main/INSTALL.md) 22 | 23 | This repository uses git submodules, and can be cloned using: 24 | ``` 25 | git clone --recurse-submodules git@github.com:transistorfet/computie.git 26 | ``` 27 | 28 | ComputieVME - The Next Generation 29 | --------------------------------- 30 | 31 | The next iteration of this project is ComputieVME, a VME-based MC68030 CPU card, which is part of 32 | the [Retroverse](https://github.com/transistorfet/retroverse/) project, along with a number of other 33 | VME-based components. The new system also runs the 34 | [Gloworm](https://github.com/transistorfet/gloworm/) operating system. Development is ongoing and 35 | details can be found in the github repo or at 36 | [jabberwocky.ca](https://jabberwocky.ca/projects/retroverse/). I also live streamed some of the 37 | designing and building process, with recordings available at 38 | [youtube.com/@transistorfet](https://www.youtube.com/@transistorfet) 39 | 40 | 41 | The Operating System (Gloworm) 42 | ------------------------------ 43 | 44 | [Gloworm](https://github.com/transistorfet/gloworm/) (now in a separate repository) is largely based on reading 45 | Operating Systems Design and Implementation 2ed by Andrew S. Tanenbaum, although I've gone with a monolithic design, at 46 | least for the time being, for the simplicity of it. It can do preemptive multitasking using the 68681 timer. It also 47 | has an implementation of the minix version 1 filesystem, which uses RAM (through a device driver) to store the data, or 48 | a Compact Flash card connected as an IDE device. The second serial port can be configured as a SLIP device, with a 49 | basic implementation of UDP and TCP through a BSD sockets-style API, and an NTP command is provided for updating the 50 | system time on boot (when booting from disk). 51 | 52 | ![alt text](images/OS-basic.gif "OS") 53 | 54 | The above video shows connecting over serial from a modern PC and resetting the hardware to run the monitor in ROM 55 | which displays the welcome message. The kernel is already loaded in RAM, so running the boot command will boot 56 | the kernel which then starts the shell. From the shell, some basic file operations and the ps command are shown. 57 | 58 | 59 | The k30 Single Board Computer 60 | ----------------------------- 61 | 62 | The k30 is the latest version, using a 68030. It has 2MB SRAM, 512KB Flash, a 68681 Dual UART, and a CompactFlash. 63 | It's as similar to 68k-SMT as possible while still upgrading the CPU. It doesn't use a programmable logic device for 64 | the glue logic as many similar projects use, instead opting for eleven 74 series logic chips. It still manages to 65 | use the full 32-bit data bus for RAM, but only one flash chip is used which has an 8-bit data bus in order to reduce 66 | complexity. Most of the software will be run from RAM, so this shouldn't be a problem. 67 | 68 | [k30 Schematics](https://github.com/transistorfet/computie/raw/main/hardware/k30-SBC/k30-SBC.pdf) 69 | 70 | DIP switches are used to select the time delay to use for the CompactFlash card (which is interfaced directly to the 71 | CPU), to enable the bus error watchdog timer, and to enable/disable the cache and MMU features. 72 | 73 | 74 | k30 Revision 2 75 | -------------- 76 | 77 | This revision fixes the issues of the previous one. The compact flash card can now be accessed, and the OS is able 78 | to boot entirely from the compact flash card without issue. 79 | 80 | ![alt text](images/k30-SBC-rev2/board-top.jpg "k30-SBC Rev. 2 Assembled Board") 81 | 82 | 83 | k30 Revision 1 84 | -------------- 85 | 86 | I made a mistake and used the wrong size footprint for the two 74HC253s, which only come in a 16SSOP package and not 87 | the TSSOP package used by the other logic chips. The footprint used were 4.9 mm wide but should have been 6.2mm. 88 | Luckily I managed to bend the pins under the body of the chips which was enough to get all the pins touching all the 89 | pads. It was very tricky to solder, and there was a bridge between DS3 and ground which was very difficult to get 90 | unstuck, but it's working now. 91 | 92 | I also made a mistake in the DSACK signals used to terminate a memory cycle, specifically for the compact flash card. 93 | The logic was inverted, so the card was inaccessible, and my attempts at fixing it fried the clock, although it might 94 | have just been the crystal. I set the project aside for a while and then made a new revision. For details on the 95 | issues, see the [errata](https://github.com/transistorfet/computie/raw/main/hardware/k30-SBC/revisions/k30-SBC-rev1-errata.txt) 96 | 97 | ![alt text](images/k30-SBC-rev1/k30-SBC-running.jpg "k30-SBC Running") 98 | ![alt text](images/k30-SBC-rev1/k30-PCBs.jpg "k30-SBC Rev. 1 PCB") 99 | 100 | 101 | The 68k Single Board Computer 102 | ----------------------------- 103 | 104 | A simple single board computer using a Motorola 68010 CPU, which can connect to a host computer via USB/TTL-Serial. 105 | It has a bus for connecting a supervisor arduino or expansion devices, but it can operate standalone using the onboard 106 | UARTs. It has 1MB of onboard Flash, 1MB of onboard SRAM, and a 68681 Dual UART chip with GPIO. Some of the GPIO 107 | pins are wired to 4 general purpose LEDs and 2 general purpose buttons. 108 | 109 | [68k Board Schematics](https://github.com/transistorfet/computie/raw/main/hardware/68k-SBC/68kBoard.pdf) 110 | 111 | 112 | The serial ports require external TTL-to-something conversion and are designed to be used with an FTDI USB-to-Serial 113 | cable or adapter. Two optional jumpers can be used to supply power to the board from one of the USB ports (only one 114 | should be jumped at a time, and only if the onboard power supply is disconnected). It typically takes about 365mA at 115 | 5V to power. 116 | 117 | Two jumpers are provided to select what address the ROM will appear in (either 0x0000 or 0x2000), and whether to enable 118 | onboard DTACK generation for address space 0x0000. By moving the ROM to 0x2000 and disabling DTACK in 0x0000, a 119 | connected arduino can boot the 68000 directly. 120 | 121 | I decided to use discrete 74 Series chips for the glue logic to keep it simple and easy for others to build. I tried 122 | to minimize the amount of logic chips needed, so it doesn't have a watchdog timer to trigger a bus error when an 123 | unmapped address is accessed. 124 | 125 | It's currently clocked at 12MHz, although there seems to be an issue with the arduino's DTACK generation at that speed. 126 | It previously was working at 10MHz on the rev0 board. 127 | 128 | The SBC version uses all DIP packaged chips and through-hole parts. The SMT version uses surface mount chips for the 129 | logic and ram, and PLCC packaged chips for the rest. A CompactFlash socket and a 74HC32 to accommodate it has been 130 | added and the power supply has been removed, but it is otherwise the same design. 131 | 132 | 133 | SMT Revision 1 134 | -------------- 135 | 136 | ![alt text](images/68k-SMT-rev1/SMT.jpg "68k-SMT Rev. 1") 137 | ![alt text](images/68k-SMT-rev1/SMT-running.jpg "68k-SMT Running") 138 | 139 | 140 | SBC Revision 2 141 | -------------- 142 | 143 | ![alt text](images/68k-SBC-rev2/SBC.jpg "68k-SBC Rev. 2") 144 | ![alt text](images/68k-SBC-rev2/ArduinoShield.jpg "Supervisor Arduino Shield") 145 | ![alt text](images/68k-SBC-rev2/SBC-running.jpg "68k-SBC Running") 146 | ![alt text](images/68k-SBC-rev2/PCBs.jpg "68k-SBC PCBs") 147 | 148 | 149 | SBC Revision 0 150 | -------------- 151 | 152 | This version has 64KB of EEPROM instead of Flash, and doesn't have onboard interrupt circuitry. It started off with a 153 | 68000 CPU, but that was later upgraded to a 68010 to allow for relocatable interrupt tables when using off-board 154 | interrupt circuitry. 155 | 156 | ![alt text](images/68k-SBC-rev0/PCB-front.jpg "68k-SBC PCB Front") 157 | ![alt text](images/68k-SBC-rev0/SBC.jpg "68k-SBC") 158 | ![alt text](images/68k-SBC-rev0/PCB-patch.jpg "68k-SBC patch for design mistake") 159 | 160 | I made a mistake and left out the logic for LDS/UDS in the chip select for the high and low memory chips. When writing 161 | a single byte to memory, it would also attempt to write to both the high and low chips, instead of only one. Thanks to 162 | a poster on EEVblog who suggested patching it with a P-channel MOSFET shown soldered to the back of the SRAM chips to 163 | interpose the UDS/LDS signals into the chip selects, with the original traces cut. 164 | 165 | 166 | Breadboard Version 167 | ------------------ 168 | 169 | ![alt text](images/Breadboard-serial.jpg "68k-SBC Breadboard") 170 | 171 | 172 | Operating System Booting From Monitor/Compact Flash on 68k-SMT 173 | -------------------------------------------------------------- 174 | 175 | ![alt text](images/OS-booting.gif "OS Booting") 176 | 177 | The above video shows connecting over serial from a modern computer after first powering the board on. The monitor 178 | runs first, giving the ">" prompt. The bootloader has been burnt into flash at address 0x20000. From the monitor, the 179 | boot loader is run, which then loads the kernel from the attached compact flash card. Each period (.) character 180 | printed represents 1 kilobyte of data loaded from disk). The boot loader then jumps to the loaded kernel, which 181 | displays boot messages before running the init process from disk. The init process first runs `sh /etc/rc`", which runs 182 | the ntpdate command to update the system time. It then runs an interactive shell. 183 | 184 | Some commands are shown after boot, and then the httpd program is run (which has forking disabled for the time being). 185 | From another computer, the curl command is run to issue a request to the board. The httpd program responds with the 186 | data "This is a secret message" 187 | 188 | 189 | References 190 | ---------- 191 | 192 | - [S-100 68000 CPU Board](http://s100computers.com/My%20System%20Pages/68000%20Board/68K%20CPU%20Board.htm) 193 | - [Tiny68K, 68000 SBC](https://www.retrobrewcomputers.org/doku.php?id=boards:sbc:tiny68k) 194 | - [Motorola 68000 computer](https://hackaday.io/project/7242-motorola-68000-computer) 195 | - [68k Single Board Computer](https://www.kswichit.com/68k/68k.html) 196 | - [Kiwi - a 68k Homebrew Computer](https://www.ist-schlau.de/hardware.html) 197 | 198 | - [ECB KISS-68030](https://www.retrobrewcomputers.org/doku.php?id=boards:ecb:kiss-68030:start) 199 | - [Gryphon 68030](https://www.retrobrewcomputers.org/doku.php?id=boards:sbc:gryphon_68030:start) 200 | - [T030](https://hackaday.io/project/9439-t030) 201 | - [Building a 68030 computer in 5 stages](https://hackaday.io/project/164041-building-a-68030-computer-in-5-stages) 202 | - [Blitz - 32bit 68030 homebrew with an ISA bus](https://blog.notartyoms-box.net/blitz/) 203 | 204 | -------------------------------------------------------------------------------- /docs/posts/images/2021-09-68k-SBC-wide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-68k-SBC-wide.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-68k-breadboard-minimal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-68k-breadboard-minimal.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-68k-breadboard-serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-68k-breadboard-serial.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-68k-breadboard-top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-68k-breadboard-top.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-Z80-breadboard-with-memory-analyzer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-Z80-breadboard-with-memory-analyzer.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-Z80-breadboard-with-memory.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-Z80-breadboard-with-memory.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-Z80-breadboard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-Z80-breadboard.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-Z80-full-system.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-Z80-full-system.jpg -------------------------------------------------------------------------------- /docs/posts/images/2021-09-arduino-with-memory-chip.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/docs/posts/images/2021-09-arduino-with-memory-chip.jpg -------------------------------------------------------------------------------- /hardware/68k-SBC/68kBoard.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "ratsnest_display_mode": 0, 18 | "selection_filter": { 19 | "dimensions": true, 20 | "footprints": true, 21 | "graphics": true, 22 | "keepouts": true, 23 | "lockedItems": true, 24 | "otherItems": true, 25 | "pads": true, 26 | "text": true, 27 | "tracks": true, 28 | "vias": true, 29 | "zones": true 30 | }, 31 | "visible_items": [ 32 | 0, 33 | 1, 34 | 2, 35 | 3, 36 | 4, 37 | 5, 38 | 8, 39 | 9, 40 | 10, 41 | 11, 42 | 12, 43 | 13, 44 | 14, 45 | 15, 46 | 16, 47 | 17, 48 | 18, 49 | 19, 50 | 20, 51 | 21, 52 | 22, 53 | 23, 54 | 24, 55 | 25, 56 | 26, 57 | 27, 58 | 28, 59 | 29, 60 | 30, 61 | 32, 62 | 33, 63 | 34, 64 | 35, 65 | 36 66 | ], 67 | "visible_layers": "fffffff_ffffffff", 68 | "zone_display_mode": 0 69 | }, 70 | "meta": { 71 | "filename": "68kBoard.kicad_prl", 72 | "version": 3 73 | }, 74 | "project": { 75 | "files": [] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /hardware/68k-SBC/68kBoard.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SBC/68kBoard.pdf -------------------------------------------------------------------------------- /hardware/68k-SBC/README.md: -------------------------------------------------------------------------------- 1 | 2 | 68k-SBC 3 | ======= 4 | 5 | Status: Built & Tested 6 | 7 | Latest: Rev.2 8 | 9 | ### About 10 | A single board computer with DIP packaged chips. The only programmable chip is the flash memory, which can 11 | be written in-circuit using the Ardunio-based supervisor shield. 12 | 13 | [Revision 2 Notes & Errata](revisions/68kBoard-rev2-errata.txt) 14 | 15 | [Revision 2 Schematic](revisions/68kBoard-rev2.pdf) 16 | 17 | [Revision 2 Gerbers](revisions/68kBoard-rev2.zip) 18 | 19 | 20 | ![alt text](../../images/68k-SBC-rev2/SBC.jpg "68k-SBC board, with an orangey-yellow coloured solder mask, fully populated with all components") 21 | ![alt text](../../images/68k-SBC-rev2/SBC-running.jpg "68k-SBC board hooked up to USB via an FTDI serial converter and with the Ardunio supervisor shield connected via two rainbow-coloured 40-pin ribbon cables connected to the PCB, and the Ardunio connected by a USB cable to a computer, which is supplying power to everything") 22 | -------------------------------------------------------------------------------- /hardware/68k-SBC/revisions/68kBoard-rev0-errata.txt: -------------------------------------------------------------------------------- 1 | 2 | Revision 0 Errata and Notes 3 | =========================== 4 | 5 | - the silk screen for the MOSFET is backwards (likely the symbol on the schematic has the wrong pinout) 6 | 7 | - The pullup resistor for DTACK (R11) at 10k Ohms was too high, resulting in an idle voltage on DTACK that is too low. This caused the 8 | CPU to read from incorrect addresses and stop after 6 cycles. The breadboard version had a 1k Ohm pullup, but the design called for 9 | 10k for all pullups. It seems like ~5k is recommended for TTL circuits, but to play it safer, I installed a 2.2k, which worked, but 10 | later switched to a 1k. I tried a 4.7k resistor after debugging an issue with the serial chip, and that didn't work so well, as it 11 | turned out. Perhaps a better MOSFET would interfer less. 12 | 13 | - I should have labeled all chips with their pinouts to aid in debugging. I also should have added labels to the arduino shield 14 | 15 | - the UDS and LDS lines were not included in the memory logic, which is fine for reads, but causes problems when writing one 16 | byte at a time (causing the other byte in the memory word to be replaced). This is a very critical problem. Fixing it would 17 | require another 4 OR gates to compare the LDS/UDS lines with the chip selects or write lines for each of the 4 memory chips. 18 | After posting in EEVBlog forums, a temporary fix would be to use a P-channel mosfet for each memory chip, or a 74LVC1G32 or 19 | 74LVC2G32 to fix the issue. These could be permanent solutions as well, which would require less reworking of the PCB design 20 | but at the expense of requiring more parts to build 21 | 22 | - it would have been better if the arduino could address all memory, so that it could directly write to rom and ram while the 23 | cpu is suspended 24 | 25 | - if using shrouded headers for the expansions, then the silk screen would be covered by the shroud. There's not much space where the 26 | jumpers are though, to move them over. This problem of not enough space also applies to the cpu itself 27 | 28 | - the arduino shield needs access to the expansion pins not wired to arduino ports, so that they can be debugged or wired up through 29 | jumpers. It would also be handy to have a way of connecting and disconnecting the 0SEL pin to the arduino to test the rom, which 30 | I've been doing manually with individual wires on the signals header 31 | 32 | - the power capacitor spacing is a lot more than needed, especially for the 5V side cap 33 | 34 | - It might be convenient to have a write protect jumper for the eeprom to disable the write pin, because I think the program sometimes 35 | writes to the arduino memory and corrupts it which requires a reset of the arduino (needs more investigation) 36 | 37 | - the address silk screen labels for the CPU are wrong. They all say D5 38 | 39 | 40 | Observations: 41 | 42 | - with external interrupt logic, it doesn't seem to really need to the "NOT AS (ADDRESS SELECT)" signal to be included with the 43 | three FCx signals to produce an acknowledge signal. Adding it in will shorten the pulse by a bit, but the timing diagram for the 44 | duart chip shows the irq and irqack signals going low almost at the same time, so it probably shouldn't make a difference 45 | 46 | - when running off the memory (no arduino), it's possible to remove the counter chip and wire power directly to the mosfet that pulls 47 | dtack low, and have it run correctly. This seems weird in that the serial chip is also working with an always low dtack, but it might 48 | be that the duart chip has a response time lower than the cpu, same as the memory. The arduino definitely can't work in these 49 | conditions but it should be possible to rework the logic a bit to use the same address conditions to activate the mosfet, so that dtack 50 | is only pulled low when the memory is addressed. This would allow us to get rid of yet another chip. 51 | 52 | -------------------------------------------------------------------------------- /hardware/68k-SBC/revisions/68kBoard-rev0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SBC/revisions/68kBoard-rev0.pdf -------------------------------------------------------------------------------- /hardware/68k-SBC/revisions/68kBoard-rev0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SBC/revisions/68kBoard-rev0.zip -------------------------------------------------------------------------------- /hardware/68k-SBC/revisions/68kBoard-rev2-errata.txt: -------------------------------------------------------------------------------- 1 | 2 | Revision 2 Errata and Notes 3 | =========================== 4 | 5 | - it would have been handy if there were some power pins to hook the oscilloscope to 6 | 7 | - there is some kind of issue with booting, where it requests addresses, 0, 4, 0, and 4, rather than 0, 2, 4, 6. After 8 | investigating, it appears to be an issue with the arduino only. Once the flash memory was programmed and booted, it 9 | worked perfectly. As for the arduino, it appears to be an issue with dtack (which I recall being the reason I previously 10 | saw these symptoms, but it was a different cause). It seemed to be the inserted NOPs between the dtack assertion and 11 | unassertion were causing it to be too slow, but removing them, while resulting in a proper initial startup, still doesn't 12 | boot correctly. For the moment, I suspect it's the increased speed from 10MHz to 12MHz of the CPU which is making it too 13 | fast for the arduino. 14 | 15 | - 2023-07: This applies to most versions of Computie: If a ribbon cable is attached to the control 16 | signals header, it will cause the CPU to not work correctly due to issues with DSACK0/1. A 17 | larger pull up resistor on those signals should fix the problem (1K was tested) 18 | 19 | -------------------------------------------------------------------------------- /hardware/68k-SBC/revisions/68kBoard-rev2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SBC/revisions/68kBoard-rev2.pdf -------------------------------------------------------------------------------- /hardware/68k-SBC/revisions/68kBoard-rev2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SBC/revisions/68kBoard-rev2.zip -------------------------------------------------------------------------------- /hardware/68k-SBC/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name "Computie_68k")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/computie-kicad-library/symbols/Computie_68k.kicad_sym")(options "")(descr "")) 3 | (lib (name "Computie_Memory")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/computie-kicad-library/symbols/Computie_Memory.kicad_sym")(options "")(descr "")) 4 | ) 5 | -------------------------------------------------------------------------------- /hardware/68k-SMT/68k-SMT.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_nets": [], 7 | "high_contrast_mode": 0, 8 | "net_color_mode": 1, 9 | "opacity": { 10 | "pads": 1.0, 11 | "tracks": 1.0, 12 | "vias": 1.0, 13 | "zones": 0.6 14 | }, 15 | "ratsnest_display_mode": 0, 16 | "selection_filter": { 17 | "dimensions": true, 18 | "footprints": true, 19 | "graphics": true, 20 | "keepouts": true, 21 | "lockedItems": true, 22 | "otherItems": true, 23 | "pads": true, 24 | "text": true, 25 | "tracks": true, 26 | "vias": true, 27 | "zones": true 28 | }, 29 | "visible_items": [ 30 | 0, 31 | 1, 32 | 2, 33 | 3, 34 | 4, 35 | 5, 36 | 8, 37 | 9, 38 | 10, 39 | 11, 40 | 12, 41 | 13, 42 | 14, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36 64 | ], 65 | "visible_layers": "fffffff_ffffffff", 66 | "zone_display_mode": 1 67 | }, 68 | "meta": { 69 | "filename": "68k-SMT.kicad_prl", 70 | "version": 3 71 | }, 72 | "project": { 73 | "files": [] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /hardware/68k-SMT/68k-SMT.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.049999999999999996, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.09999999999999999, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.762, 37 | "height": 1.524, 38 | "width": 1.524 39 | }, 40 | "silk_line_width": 0.12, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.508 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "filename": "board_design_settings.json", 55 | "version": 2 56 | }, 57 | "rule_severities": { 58 | "annular_width": "error", 59 | "clearance": "error", 60 | "copper_edge_clearance": "error", 61 | "courtyards_overlap": "error", 62 | "diff_pair_gap_out_of_range": "error", 63 | "diff_pair_uncoupled_length_too_long": "error", 64 | "drill_out_of_range": "error", 65 | "duplicate_footprints": "warning", 66 | "extra_footprint": "warning", 67 | "footprint_type_mismatch": "error", 68 | "hole_clearance": "error", 69 | "hole_near_hole": "error", 70 | "invalid_outline": "error", 71 | "item_on_disabled_layer": "error", 72 | "items_not_allowed": "error", 73 | "length_out_of_range": "error", 74 | "malformed_courtyard": "error", 75 | "microvia_drill_out_of_range": "error", 76 | "missing_courtyard": "ignore", 77 | "missing_footprint": "warning", 78 | "net_conflict": "warning", 79 | "npth_inside_courtyard": "ignore", 80 | "padstack": "error", 81 | "pth_inside_courtyard": "ignore", 82 | "shorting_items": "error", 83 | "silk_over_copper": "warning", 84 | "silk_overlap": "warning", 85 | "skew_out_of_range": "error", 86 | "through_hole_pad_without_hole": "error", 87 | "too_many_vias": "error", 88 | "track_dangling": "warning", 89 | "track_width": "error", 90 | "tracks_crossing": "error", 91 | "unconnected_items": "error", 92 | "unresolved_variable": "error", 93 | "via_dangling": "warning", 94 | "zone_has_empty_net": "error", 95 | "zones_intersect": "error" 96 | }, 97 | "rule_severitieslegacy_courtyards_overlap": true, 98 | "rule_severitieslegacy_no_courtyard_defined": false, 99 | "rules": { 100 | "allow_blind_buried_vias": false, 101 | "allow_microvias": false, 102 | "max_error": 0.005, 103 | "min_clearance": 0.0, 104 | "min_copper_edge_clearance": 0.06, 105 | "min_hole_clearance": 0.25, 106 | "min_hole_to_hole": 0.25, 107 | "min_microvia_diameter": 0.19999999999999998, 108 | "min_microvia_drill": 0.09999999999999999, 109 | "min_silk_clearance": 0.0, 110 | "min_through_hole_diameter": 0.3, 111 | "min_track_width": 0.127, 112 | "min_via_annular_width": 0.049999999999999996, 113 | "min_via_diameter": 0.6, 114 | "use_height_for_length_calcs": true 115 | }, 116 | "track_widths": [ 117 | 0.0, 118 | 0.4, 119 | 1.0 120 | ], 121 | "via_dimensions": [ 122 | { 123 | "diameter": 0.0, 124 | "drill": 0.0 125 | }, 126 | { 127 | "diameter": 1.0, 128 | "drill": 0.5 129 | } 130 | ], 131 | "zones_allow_external_fillets": false, 132 | "zones_use_no_outline": true 133 | }, 134 | "layer_presets": [] 135 | }, 136 | "boards": [], 137 | "cvpcb": { 138 | "equivalence_files": [] 139 | }, 140 | "erc": { 141 | "erc_exclusions": [], 142 | "meta": { 143 | "version": 0 144 | }, 145 | "pin_map": [ 146 | [ 147 | 0, 148 | 0, 149 | 0, 150 | 0, 151 | 0, 152 | 0, 153 | 1, 154 | 0, 155 | 0, 156 | 0, 157 | 0, 158 | 2 159 | ], 160 | [ 161 | 0, 162 | 2, 163 | 0, 164 | 1, 165 | 0, 166 | 0, 167 | 1, 168 | 0, 169 | 2, 170 | 2, 171 | 2, 172 | 2 173 | ], 174 | [ 175 | 0, 176 | 0, 177 | 0, 178 | 0, 179 | 0, 180 | 0, 181 | 1, 182 | 0, 183 | 1, 184 | 0, 185 | 1, 186 | 2 187 | ], 188 | [ 189 | 0, 190 | 1, 191 | 0, 192 | 0, 193 | 0, 194 | 0, 195 | 1, 196 | 1, 197 | 2, 198 | 1, 199 | 1, 200 | 2 201 | ], 202 | [ 203 | 0, 204 | 0, 205 | 0, 206 | 0, 207 | 0, 208 | 0, 209 | 1, 210 | 0, 211 | 0, 212 | 0, 213 | 0, 214 | 2 215 | ], 216 | [ 217 | 0, 218 | 0, 219 | 0, 220 | 0, 221 | 0, 222 | 0, 223 | 0, 224 | 0, 225 | 0, 226 | 0, 227 | 0, 228 | 2 229 | ], 230 | [ 231 | 1, 232 | 1, 233 | 1, 234 | 1, 235 | 1, 236 | 0, 237 | 1, 238 | 1, 239 | 1, 240 | 1, 241 | 1, 242 | 2 243 | ], 244 | [ 245 | 0, 246 | 0, 247 | 0, 248 | 1, 249 | 0, 250 | 0, 251 | 1, 252 | 0, 253 | 0, 254 | 0, 255 | 0, 256 | 2 257 | ], 258 | [ 259 | 0, 260 | 2, 261 | 1, 262 | 2, 263 | 0, 264 | 0, 265 | 1, 266 | 0, 267 | 2, 268 | 2, 269 | 2, 270 | 2 271 | ], 272 | [ 273 | 0, 274 | 2, 275 | 0, 276 | 1, 277 | 0, 278 | 0, 279 | 1, 280 | 0, 281 | 2, 282 | 0, 283 | 0, 284 | 2 285 | ], 286 | [ 287 | 0, 288 | 2, 289 | 1, 290 | 1, 291 | 0, 292 | 0, 293 | 1, 294 | 0, 295 | 2, 296 | 0, 297 | 0, 298 | 2 299 | ], 300 | [ 301 | 2, 302 | 2, 303 | 2, 304 | 2, 305 | 2, 306 | 2, 307 | 2, 308 | 2, 309 | 2, 310 | 2, 311 | 2, 312 | 2 313 | ] 314 | ], 315 | "rule_severities": { 316 | "bus_definition_conflict": "error", 317 | "bus_entry_needed": "error", 318 | "bus_label_syntax": "error", 319 | "bus_to_bus_conflict": "error", 320 | "bus_to_net_conflict": "error", 321 | "different_unit_footprint": "error", 322 | "different_unit_net": "error", 323 | "duplicate_reference": "error", 324 | "duplicate_sheet_names": "error", 325 | "extra_units": "error", 326 | "global_label_dangling": "warning", 327 | "hier_label_mismatch": "error", 328 | "label_dangling": "error", 329 | "lib_symbol_issues": "warning", 330 | "multiple_net_names": "warning", 331 | "net_not_bus_member": "warning", 332 | "no_connect_connected": "warning", 333 | "no_connect_dangling": "warning", 334 | "pin_not_connected": "error", 335 | "pin_not_driven": "error", 336 | "pin_to_pin": "warning", 337 | "power_pin_not_driven": "error", 338 | "similar_labels": "warning", 339 | "unannotated": "error", 340 | "unit_value_mismatch": "error", 341 | "unresolved_variable": "error", 342 | "wire_dangling": "error" 343 | } 344 | }, 345 | "libraries": { 346 | "pinned_footprint_libs": [], 347 | "pinned_symbol_libs": [] 348 | }, 349 | "meta": { 350 | "filename": "68k-SMT.kicad_pro", 351 | "version": 1 352 | }, 353 | "net_settings": { 354 | "classes": [ 355 | { 356 | "bus_width": 12.0, 357 | "clearance": 0.15, 358 | "diff_pair_gap": 0.25, 359 | "diff_pair_via_gap": 0.25, 360 | "diff_pair_width": 0.2, 361 | "line_style": 0, 362 | "microvia_diameter": 0.3, 363 | "microvia_drill": 0.1, 364 | "name": "Default", 365 | "pcb_color": "rgba(0, 0, 0, 0.000)", 366 | "schematic_color": "rgba(0, 0, 0, 0.000)", 367 | "track_width": 0.15, 368 | "via_diameter": 0.6, 369 | "via_drill": 0.3, 370 | "wire_width": 6.0 371 | } 372 | ], 373 | "meta": { 374 | "version": 2 375 | }, 376 | "net_colors": null 377 | }, 378 | "pcbnew": { 379 | "last_paths": { 380 | "gencad": "", 381 | "idf": "", 382 | "netlist": "", 383 | "specctra_dsn": "", 384 | "step": "", 385 | "vrml": "" 386 | }, 387 | "page_layout_descr_file": "" 388 | }, 389 | "schematic": { 390 | "annotate_start_num": 0, 391 | "drawing": { 392 | "default_line_thickness": 6.0, 393 | "default_text_size": 50.0, 394 | "field_names": [], 395 | "intersheets_ref_own_page": false, 396 | "intersheets_ref_prefix": "", 397 | "intersheets_ref_short": false, 398 | "intersheets_ref_show": false, 399 | "intersheets_ref_suffix": "", 400 | "junction_size_choice": 3, 401 | "label_size_ratio": 0.25, 402 | "pin_symbol_size": 0.0, 403 | "text_offset_ratio": 0.08 404 | }, 405 | "legacy_lib_dir": "", 406 | "legacy_lib_list": [], 407 | "meta": { 408 | "version": 1 409 | }, 410 | "net_format_name": "Pcbnew", 411 | "ngspice": { 412 | "fix_include_paths": true, 413 | "fix_passive_vals": false, 414 | "meta": { 415 | "version": 0 416 | }, 417 | "model_mode": 0, 418 | "workbook_filename": "" 419 | }, 420 | "page_layout_descr_file": "", 421 | "plot_directory": "./", 422 | "spice_adjust_passive_values": false, 423 | "spice_external_command": "spice \"%I\"", 424 | "subpart_first_id": 65, 425 | "subpart_id_separator": 0 426 | }, 427 | "sheets": [ 428 | [ 429 | "87642339-85cc-4e59-92a6-d049f6a775a5", 430 | "" 431 | ], 432 | [ 433 | "00000000-0000-0000-0000-00005e081aed", 434 | "Memory" 435 | ], 436 | [ 437 | "00000000-0000-0000-0000-00005e114b4d", 438 | "UART" 439 | ], 440 | [ 441 | "00000000-0000-0000-0000-00005faf94fc", 442 | "CompactFlash" 443 | ] 444 | ], 445 | "text_variables": {} 446 | } 447 | -------------------------------------------------------------------------------- /hardware/68k-SMT/68k-SMT.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SMT/68k-SMT.pdf -------------------------------------------------------------------------------- /hardware/68k-SMT/README.md: -------------------------------------------------------------------------------- 1 | 2 | 68k-SMT 3 | ======= 4 | 5 | Status: Built & Tested 6 | 7 | Latest: Rev.1 8 | 9 | ### About 10 | This is an almost identical version as the 68k-SBC Rev.2 but using either PLCC chips or surface 11 | mount chips, and with the addition of a CompactFlash card slot. This was the first board I made 12 | with surface mount chips, and I pushed myself a bit with the TSSOP logic chips, which were the 13 | hardest to solder. The CompactFlash socket was the easiest to solder because it has holes that 14 | aligned the pins with the pad perfectly. I also had issues with taking too much solder off the 15 | memory chips causing micro-fractures in the solder that resulted in crashing/locking up. 16 | 17 | The goal here was to learn surface mount soldering techniques so that I could attempt a 68030 based 18 | design. I had lots of $10 QFP package 68030s, but the PGA packages were about 4 times the price, 19 | plus about $10 CAD including shipping and duties for a PGA socket (which is this [128-pin 13x13 PGA 20 | socket](https://www.peconnectors.com/sockets-pga-cpu-and-memory/hws4514/) 21 | 22 | 23 | [Revision 1 Notes & Errata](revisions/68k-SMT-rev1-errata.txt) 24 | 25 | [Revision 1 Schematic](revisions/68k-SMT-rev1.pdf) 26 | 27 | [Revision 1 Gerbers](revisions/68k-SMT-rev1.zip) 28 | 29 | 30 | ![alt text](../../images/68k-SMT-rev1/SMT.jpg "68k-SMT board, which is taller than it is wide, with a blue coloured solder mask, blue pin headers, blue ceramic capacitors, and beige 1/6W resistors, fully populated with all components, and with a CompactFlash card in the slot on the middle left with a white and blue label that reads SiliconDrive II 2GB - Silicon Systems") 31 | ![alt text](../../images/68k-SMT-rev1/SMT-running.jpg "68k-SMT board hooked up to USB via an FTDI integrated cable, which is supplying power to everything, and with the right most of 4 clear LEDs glowing blue, and the power indicating LED on the left glowing green") 32 | ![alt text](../../images/68k-SMT-rev1/SMT-back.jpg "Backside of the 68k-SMT board showing the through-hole solder connections and blue solder mask, but there is no silk screen") 33 | -------------------------------------------------------------------------------- /hardware/68k-SMT/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name "Computie_Connectors")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/footprints/Computie_Connectors.pretty")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /hardware/68k-SMT/revisions/68k-SMT-rev1-errata.txt: -------------------------------------------------------------------------------- 1 | 2 | Revision 1 Errata and Notes 3 | =========================== 4 | 5 | - 2023-07: This applies to most versions of Computie: If a ribbon cable is attached to the control 6 | signals header, it will cause the CPU to not work correctly due to issues with DSACK0/1. A 7 | larger pull up resistor on those signals should fix the problem (1K was tested) 8 | 9 | -------------------------------------------------------------------------------- /hardware/68k-SMT/revisions/68k-SMT-rev1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SMT/revisions/68k-SMT-rev1.pdf -------------------------------------------------------------------------------- /hardware/68k-SMT/revisions/68k-SMT-rev1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-SMT/revisions/68k-SMT-rev1.zip -------------------------------------------------------------------------------- /hardware/68k-SMT/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name "Computie_68k")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/computie-kicad-library/symbols/Computie_68k.kicad_sym")(options "")(descr "")) 3 | (lib (name "Computie_Memory")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/computie-kicad-library/symbols/Computie_Memory.kicad_sym")(options "")(descr "")) 4 | ) 5 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/68kBoardSupervisorShield.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_nets": [], 7 | "high_contrast_mode": 0, 8 | "net_color_mode": 1, 9 | "opacity": { 10 | "pads": 1.0, 11 | "tracks": 1.0, 12 | "vias": 1.0, 13 | "zones": 0.6 14 | }, 15 | "ratsnest_display_mode": 0, 16 | "selection_filter": { 17 | "dimensions": true, 18 | "footprints": true, 19 | "graphics": true, 20 | "keepouts": true, 21 | "lockedItems": true, 22 | "otherItems": true, 23 | "pads": true, 24 | "text": true, 25 | "tracks": true, 26 | "vias": true, 27 | "zones": true 28 | }, 29 | "visible_items": [ 30 | 0, 31 | 1, 32 | 2, 33 | 3, 34 | 4, 35 | 5, 36 | 8, 37 | 9, 38 | 10, 39 | 11, 40 | 12, 41 | 13, 42 | 14, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36 64 | ], 65 | "visible_layers": "fffffff_ffffffff", 66 | "zone_display_mode": 0 67 | }, 68 | "meta": { 69 | "filename": "68kBoardSupervisorShield.kicad_prl", 70 | "version": 3 71 | }, 72 | "project": { 73 | "files": [] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/68kBoardSupervisorShield.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.049999999999999996, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.09999999999999999, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.762, 37 | "height": 1.524, 38 | "width": 1.524 39 | }, 40 | "silk_line_width": 0.12, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.508 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "filename": "board_design_settings.json", 55 | "version": 2 56 | }, 57 | "rule_severities": { 58 | "annular_width": "error", 59 | "clearance": "error", 60 | "copper_edge_clearance": "error", 61 | "courtyards_overlap": "error", 62 | "diff_pair_gap_out_of_range": "error", 63 | "diff_pair_uncoupled_length_too_long": "error", 64 | "drill_out_of_range": "error", 65 | "duplicate_footprints": "warning", 66 | "extra_footprint": "warning", 67 | "footprint_type_mismatch": "error", 68 | "hole_clearance": "error", 69 | "hole_near_hole": "error", 70 | "invalid_outline": "error", 71 | "item_on_disabled_layer": "error", 72 | "items_not_allowed": "error", 73 | "length_out_of_range": "error", 74 | "malformed_courtyard": "error", 75 | "microvia_drill_out_of_range": "error", 76 | "missing_courtyard": "ignore", 77 | "missing_footprint": "warning", 78 | "net_conflict": "warning", 79 | "npth_inside_courtyard": "ignore", 80 | "padstack": "error", 81 | "pth_inside_courtyard": "ignore", 82 | "shorting_items": "error", 83 | "silk_over_copper": "warning", 84 | "silk_overlap": "warning", 85 | "skew_out_of_range": "error", 86 | "through_hole_pad_without_hole": "error", 87 | "too_many_vias": "error", 88 | "track_dangling": "warning", 89 | "track_width": "error", 90 | "tracks_crossing": "error", 91 | "unconnected_items": "error", 92 | "unresolved_variable": "error", 93 | "via_dangling": "warning", 94 | "zone_has_empty_net": "error", 95 | "zones_intersect": "error" 96 | }, 97 | "rule_severitieslegacy_courtyards_overlap": true, 98 | "rule_severitieslegacy_no_courtyard_defined": false, 99 | "rules": { 100 | "allow_blind_buried_vias": false, 101 | "allow_microvias": false, 102 | "max_error": 0.005, 103 | "min_clearance": 0.0, 104 | "min_copper_edge_clearance": 0.024999999999999998, 105 | "min_hole_clearance": 0.25, 106 | "min_hole_to_hole": 0.25, 107 | "min_microvia_diameter": 0.19999999999999998, 108 | "min_microvia_drill": 0.09999999999999999, 109 | "min_silk_clearance": 0.0, 110 | "min_through_hole_diameter": 0.3, 111 | "min_track_width": 0.19999999999999998, 112 | "min_via_annular_width": 0.049999999999999996, 113 | "min_via_diameter": 0.39999999999999997, 114 | "use_height_for_length_calcs": true 115 | }, 116 | "track_widths": [ 117 | 0.0, 118 | 1.0 119 | ], 120 | "via_dimensions": [], 121 | "zones_allow_external_fillets": false, 122 | "zones_use_no_outline": true 123 | }, 124 | "layer_presets": [] 125 | }, 126 | "boards": [], 127 | "cvpcb": { 128 | "equivalence_files": [] 129 | }, 130 | "erc": { 131 | "erc_exclusions": [], 132 | "meta": { 133 | "version": 0 134 | }, 135 | "pin_map": [ 136 | [ 137 | 0, 138 | 0, 139 | 0, 140 | 0, 141 | 0, 142 | 0, 143 | 1, 144 | 0, 145 | 0, 146 | 0, 147 | 0, 148 | 2 149 | ], 150 | [ 151 | 0, 152 | 2, 153 | 0, 154 | 1, 155 | 0, 156 | 0, 157 | 1, 158 | 0, 159 | 2, 160 | 2, 161 | 2, 162 | 2 163 | ], 164 | [ 165 | 0, 166 | 0, 167 | 0, 168 | 0, 169 | 0, 170 | 0, 171 | 1, 172 | 0, 173 | 1, 174 | 0, 175 | 1, 176 | 2 177 | ], 178 | [ 179 | 0, 180 | 1, 181 | 0, 182 | 0, 183 | 0, 184 | 0, 185 | 1, 186 | 1, 187 | 2, 188 | 1, 189 | 1, 190 | 2 191 | ], 192 | [ 193 | 0, 194 | 0, 195 | 0, 196 | 0, 197 | 0, 198 | 0, 199 | 1, 200 | 0, 201 | 0, 202 | 0, 203 | 0, 204 | 2 205 | ], 206 | [ 207 | 0, 208 | 0, 209 | 0, 210 | 0, 211 | 0, 212 | 0, 213 | 0, 214 | 0, 215 | 0, 216 | 0, 217 | 0, 218 | 2 219 | ], 220 | [ 221 | 1, 222 | 1, 223 | 1, 224 | 1, 225 | 1, 226 | 0, 227 | 1, 228 | 1, 229 | 1, 230 | 1, 231 | 1, 232 | 2 233 | ], 234 | [ 235 | 0, 236 | 0, 237 | 0, 238 | 1, 239 | 0, 240 | 0, 241 | 1, 242 | 0, 243 | 0, 244 | 0, 245 | 0, 246 | 2 247 | ], 248 | [ 249 | 0, 250 | 2, 251 | 1, 252 | 2, 253 | 0, 254 | 0, 255 | 1, 256 | 0, 257 | 2, 258 | 2, 259 | 2, 260 | 2 261 | ], 262 | [ 263 | 0, 264 | 2, 265 | 0, 266 | 1, 267 | 0, 268 | 0, 269 | 1, 270 | 0, 271 | 2, 272 | 0, 273 | 0, 274 | 2 275 | ], 276 | [ 277 | 0, 278 | 2, 279 | 1, 280 | 1, 281 | 0, 282 | 0, 283 | 1, 284 | 0, 285 | 2, 286 | 0, 287 | 0, 288 | 2 289 | ], 290 | [ 291 | 2, 292 | 2, 293 | 2, 294 | 2, 295 | 2, 296 | 2, 297 | 2, 298 | 2, 299 | 2, 300 | 2, 301 | 2, 302 | 2 303 | ] 304 | ], 305 | "rule_severities": { 306 | "bus_definition_conflict": "error", 307 | "bus_entry_needed": "error", 308 | "bus_label_syntax": "error", 309 | "bus_to_bus_conflict": "error", 310 | "bus_to_net_conflict": "error", 311 | "different_unit_footprint": "error", 312 | "different_unit_net": "error", 313 | "duplicate_reference": "error", 314 | "duplicate_sheet_names": "error", 315 | "extra_units": "error", 316 | "global_label_dangling": "warning", 317 | "hier_label_mismatch": "error", 318 | "label_dangling": "error", 319 | "lib_symbol_issues": "warning", 320 | "multiple_net_names": "warning", 321 | "net_not_bus_member": "warning", 322 | "no_connect_connected": "warning", 323 | "no_connect_dangling": "warning", 324 | "pin_not_connected": "error", 325 | "pin_not_driven": "error", 326 | "pin_to_pin": "warning", 327 | "power_pin_not_driven": "error", 328 | "similar_labels": "warning", 329 | "unannotated": "error", 330 | "unit_value_mismatch": "error", 331 | "unresolved_variable": "error", 332 | "wire_dangling": "error" 333 | } 334 | }, 335 | "libraries": { 336 | "pinned_footprint_libs": [], 337 | "pinned_symbol_libs": [] 338 | }, 339 | "meta": { 340 | "filename": "68kBoardSupervisorShield.kicad_pro", 341 | "version": 1 342 | }, 343 | "net_settings": { 344 | "classes": [ 345 | { 346 | "bus_width": 12.0, 347 | "clearance": 0.2, 348 | "diff_pair_gap": 0.25, 349 | "diff_pair_via_gap": 0.25, 350 | "diff_pair_width": 0.2, 351 | "line_style": 0, 352 | "microvia_diameter": 0.3, 353 | "microvia_drill": 0.1, 354 | "name": "Default", 355 | "pcb_color": "rgba(0, 0, 0, 0.000)", 356 | "schematic_color": "rgba(0, 0, 0, 0.000)", 357 | "track_width": 0.25, 358 | "via_diameter": 0.8, 359 | "via_drill": 0.4, 360 | "wire_width": 6.0 361 | } 362 | ], 363 | "meta": { 364 | "version": 2 365 | }, 366 | "net_colors": null 367 | }, 368 | "pcbnew": { 369 | "last_paths": { 370 | "gencad": "", 371 | "idf": "", 372 | "netlist": "", 373 | "specctra_dsn": "", 374 | "step": "", 375 | "vrml": "" 376 | }, 377 | "page_layout_descr_file": "" 378 | }, 379 | "schematic": { 380 | "annotate_start_num": 0, 381 | "drawing": { 382 | "default_line_thickness": 6.0, 383 | "default_text_size": 50.0, 384 | "field_names": [], 385 | "intersheets_ref_own_page": false, 386 | "intersheets_ref_prefix": "", 387 | "intersheets_ref_short": false, 388 | "intersheets_ref_show": false, 389 | "intersheets_ref_suffix": "", 390 | "junction_size_choice": 3, 391 | "label_size_ratio": 0.25, 392 | "pin_symbol_size": 0.0, 393 | "text_offset_ratio": 0.08 394 | }, 395 | "legacy_lib_dir": "", 396 | "legacy_lib_list": [], 397 | "meta": { 398 | "version": 1 399 | }, 400 | "net_format_name": "", 401 | "ngspice": { 402 | "fix_include_paths": true, 403 | "fix_passive_vals": false, 404 | "meta": { 405 | "version": 0 406 | }, 407 | "model_mode": 0, 408 | "workbook_filename": "" 409 | }, 410 | "page_layout_descr_file": "", 411 | "plot_directory": "./", 412 | "spice_adjust_passive_values": false, 413 | "spice_external_command": "spice \"%I\"", 414 | "subpart_first_id": 65, 415 | "subpart_id_separator": 0 416 | }, 417 | "sheets": [ 418 | [ 419 | "6fdf4701-bb60-4886-9e24-d098fe3aa470", 420 | "" 421 | ] 422 | ], 423 | "text_variables": {} 424 | } 425 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/68kBoardSupervisorShield.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-Supervisor/68kBoardSupervisorShield.pdf -------------------------------------------------------------------------------- /hardware/68k-Supervisor/README.md: -------------------------------------------------------------------------------- 1 | 2 | 68k-Supervisor 3 | ============== 4 | 5 | Status: Built & Tested 6 | 7 | Latest: Rev.2 8 | 9 | ### About 10 | An arduino shield for the Arduino Mega 2560 with two 40-pin connectors that match the two 40-pin 11 | expansion headers of the computie single board computers (68k-SBC, 68k-SMT, and k30-SBC with 12 | rework). 13 | 14 | ### 68k-SBC and 68k-SMT 15 | 16 | Use the [68kSupervisor](../../software/arduino/68kSupervisor) sketch to program the flash 17 | in-circuit, debug the CPU, or host memory and serial I/O access via the memory bus. Make sure to 18 | set the 68k-* board jumpers correctly for DTACK and the RAM location if debugging or hosting with 19 | the supervisor. 20 | 21 | ### k30-SBC 22 | 23 | This PCB requires some changes before it can be used with the k30-SBC: 24 | - Address 0 on the ADBUS 40-pin connector (Pin 39) should be wired to Digital Input #9 (D9) of the 25 | Arudino 26 | - the WR pin on the SIGBUS 40-pin connector (Pin 14) should be wired to Digital Input #8 of the 27 | Arudino (D8). It was a duplicate of R/W on the 68k-* boards, but it's now the DS (data strobe) 28 | signal from the 68030 on the k30-SBC 29 | The [k30FlashWriter](../../software/arduino/k30FlashWriter) sketch should be used, which will only 30 | allow running or suspending the CPU, and writing to the flash chip in-circuit to bootstrap the 31 | board. The debugging feature has been removed since it didn't work correctly at the 12MHz speed 32 | that the 68030 is running at. The k30 board only has one 512kB of flash in a single 8-bit wide 33 | chip, instead of two flash chips in parallel to fit the 16-bit interface of the 68010 that the 68k-* 34 | boards have, which is why this alternate flash writing sketch is needed. The reworked shield can 35 | still work with the 68kSupervisor sketch to communicate with the 68k-* boards. 36 | 37 | 38 | [Revision 2 Schematic](revisions/68kBoardSupervisorShield-rev2.pdf) 39 | 40 | [Revision 2 Gerbers](revisions/68kBoardSupervisorShield-rev2.zip) 41 | 42 | 43 | ![alt text](../../images/68k-SBC-rev2/ArduinoShield.jpg "An arduino shield for the Arduino Mega 2560 printed with white solder mask, and with two 40-pin headers down the middle which connect to the expansion interface on the computie single board computers") 44 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/.gitignore: -------------------------------------------------------------------------------- 1 | # For PCBs designed using KiCad: http://www.kicad-pcb.org/ 2 | 3 | # Temporary files 4 | *.000 5 | *.bak 6 | *.bck 7 | *.kicad_pcb-bak 8 | *~ 9 | _autosave-* 10 | *.tmp 11 | 12 | # Netlist files (exported from Eeschema) 13 | *.net 14 | 15 | # Autorouter files (exported from Pcbnew) 16 | *.dsn 17 | *.ses 18 | 19 | # Exported BOM files 20 | *.xml 21 | *.csv 22 | 23 | # Ignore the testproject files 24 | testproject.sch 25 | testproject.pro 26 | testproject.kicad_pcb 27 | fp-lib-table 28 | *-cache.lib 29 | *-rescue.lib 30 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_101_Shield.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_101_Shield (layer F.Cu) (tedit 5A8605BA) 2 | (descr https://store.arduino.cc/genuino-101) 3 | (fp_text reference XA** (at 2.54 -54.356) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_101_Shield (at 15.494 -54.356) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_line (start 9.525 -32.385) (end -6.35 -32.385) (layer B.CrtYd) (width 0.15)) 10 | (fp_line (start 9.525 -43.815) (end -6.35 -43.815) (layer B.CrtYd) (width 0.15)) 11 | (fp_line (start 9.525 -43.815) (end 9.525 -32.385) (layer B.CrtYd) (width 0.15)) 12 | (fp_line (start -6.35 -43.815) (end -6.35 -32.385) (layer B.CrtYd) (width 0.15)) 13 | (fp_text user . (at 62.484 -32.004) (layer F.SilkS) 14 | (effects (font (size 1 1) (thickness 0.15))) 15 | ) 16 | (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 17 | (fp_line (start -1.905 -3.175) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 18 | (fp_line (start -1.905 -12.065) (end -1.905 -3.175) (layer B.CrtYd) (width 0.15)) 19 | (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer B.CrtYd) (width 0.15)) 20 | (fp_line (start 0 -53.34) (end 0 0) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 66.04 -40.64) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 68.58 -38.1) (end 66.04 -40.64) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 68.58 -3.81) (end 68.58 -38.1) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 66.04 -1.27) (end 68.58 -3.81) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 66.04 0) (end 66.04 -1.27) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start 64.516 -53.34) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start 0 0) (end 66.04 0) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start 0 -53.34) (end 64.516 -53.34) (layer F.SilkS) (width 0.15)) 29 | (pad RST2 thru_hole oval (at 63.627 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad GND4 thru_hole oval (at 66.167 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad MOSI thru_hole oval (at 66.167 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad SCK thru_hole oval (at 63.627 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad 5V2 thru_hole oval (at 66.167 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad A0 thru_hole oval (at 50.8 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad VIN thru_hole oval (at 45.72 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad GND3 thru_hole oval (at 43.18 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad GND2 thru_hole oval (at 40.64 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad 5V1 thru_hole oval (at 38.1 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad 3V3 thru_hole oval (at 35.56 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad RST1 thru_hole oval (at 33.02 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad IORF thru_hole oval (at 30.48 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D0 thru_hole oval (at 63.5 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D1 thru_hole oval (at 60.96 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad D2 thru_hole oval (at 58.42 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad D3 thru_hole oval (at 55.88 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad D4 thru_hole oval (at 53.34 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D5 thru_hole oval (at 50.8 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D6 thru_hole oval (at 48.26 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D7 thru_hole oval (at 45.72 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad GND1 thru_hole oval (at 26.416 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 51 | (pad D8 thru_hole oval (at 41.656 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 52 | (pad D9 thru_hole oval (at 39.116 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 53 | (pad D10 thru_hole oval (at 36.576 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 54 | (pad "" np_thru_hole circle (at 66.04 -7.62) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 55 | (pad "" np_thru_hole circle (at 66.04 -35.56) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 56 | (pad "" np_thru_hole circle (at 15.24 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 57 | (pad "" np_thru_hole circle (at 13.97 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 58 | (pad SCL thru_hole oval (at 18.796 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 59 | (pad SDA thru_hole oval (at 21.336 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 60 | (pad AREF thru_hole oval (at 23.876 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 61 | (pad D13 thru_hole oval (at 28.956 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 62 | (pad D12 thru_hole oval (at 31.496 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 63 | (pad D11 thru_hole oval (at 34.036 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 64 | (pad ATN thru_hole oval (at 27.94 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 65 | (pad A1 thru_hole oval (at 53.34 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 66 | (pad A2 thru_hole oval (at 55.88 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 67 | (pad A3 thru_hole oval (at 58.42 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 68 | (pad A4 thru_hole oval (at 60.96 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 69 | (pad A5 thru_hole oval (at 63.5 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 70 | (pad MISO thru_hole oval (at 63.627 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 71 | ) 72 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Due_Shield.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Due_Shield (layer F.Cu) (tedit 5A8605C9) 2 | (descr https://store.arduino.cc/arduino-due) 3 | (fp_text reference XA** (at 2.54 -54.356) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Due_Shield (at 15.494 -54.356) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_text user . (at 62.484 -32.004) (layer F.SilkS) 10 | (effects (font (size 1 1) (thickness 0.15))) 11 | ) 12 | (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 13 | (fp_line (start -1.905 -3.175) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 14 | (fp_line (start -1.905 -12.065) (end -1.905 -3.175) (layer B.CrtYd) (width 0.15)) 15 | (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer B.CrtYd) (width 0.15)) 16 | (fp_line (start 0 -53.34) (end 0 0) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 99.06 -40.64) (end 99.06 -51.816) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 101.6 -38.1) (end 99.06 -40.64) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start 101.6 -3.81) (end 101.6 -38.1) (layer F.SilkS) (width 0.15)) 20 | (fp_line (start 99.06 -1.27) (end 101.6 -3.81) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 99.06 0) (end 99.06 -1.27) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 97.536 -53.34) (end 99.06 -51.816) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 0 0) (end 99.06 0) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 0 -53.34) (end 97.536 -53.34) (layer F.SilkS) (width 0.15)) 25 | (pad RST2 thru_hole oval (at 63.627 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 26 | (pad GND4 thru_hole oval (at 66.167 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 27 | (pad MOSI thru_hole oval (at 66.167 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 28 | (pad SCK thru_hole oval (at 63.627 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 29 | (pad 5V2 thru_hole oval (at 66.167 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad A0 thru_hole oval (at 50.8 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad VIN thru_hole oval (at 45.72 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad GND3 thru_hole oval (at 43.18 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad GND2 thru_hole oval (at 40.64 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad 5V1 thru_hole oval (at 38.1 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad 3V3 thru_hole oval (at 35.56 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad RST1 thru_hole oval (at 33.02 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad IORF thru_hole oval (at 30.48 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad D21 thru_hole oval (at 86.36 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad D20 thru_hole oval (at 83.82 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad D19 thru_hole oval (at 81.28 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad D18 thru_hole oval (at 78.74 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D17 thru_hole oval (at 76.2 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D16 thru_hole oval (at 73.66 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad D15 thru_hole oval (at 71.12 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad D14 thru_hole oval (at 68.58 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad D0 thru_hole oval (at 63.5 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D1 thru_hole oval (at 60.96 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D2 thru_hole oval (at 58.42 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D3 thru_hole oval (at 55.88 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad D4 thru_hole oval (at 53.34 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 51 | (pad D5 thru_hole oval (at 50.8 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 52 | (pad D6 thru_hole oval (at 48.26 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 53 | (pad D7 thru_hole oval (at 45.72 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 54 | (pad GND1 thru_hole oval (at 26.416 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 55 | (pad D8 thru_hole oval (at 41.656 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 56 | (pad D9 thru_hole oval (at 39.116 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 57 | (pad D10 thru_hole oval (at 36.576 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 58 | (pad "" np_thru_hole circle (at 66.04 -7.62) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 59 | (pad "" np_thru_hole circle (at 66.04 -35.56) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 60 | (pad "" np_thru_hole circle (at 90.17 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 61 | (pad "" np_thru_hole circle (at 15.24 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 62 | (pad "" np_thru_hole circle (at 96.52 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 63 | (pad "" np_thru_hole circle (at 13.97 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 64 | (pad SCL1 thru_hole oval (at 18.796 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 65 | (pad SDA1 thru_hole oval (at 21.336 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 66 | (pad AREF thru_hole oval (at 23.876 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 67 | (pad D13 thru_hole oval (at 28.956 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 68 | (pad D12 thru_hole oval (at 31.496 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 69 | (pad D11 thru_hole oval (at 34.036 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 70 | (pad "" thru_hole oval (at 27.94 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 71 | (pad A1 thru_hole oval (at 53.34 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 72 | (pad A2 thru_hole oval (at 55.88 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 73 | (pad A3 thru_hole oval (at 58.42 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 74 | (pad A4 thru_hole oval (at 60.96 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 75 | (pad A5 thru_hole oval (at 63.5 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 76 | (pad A6 thru_hole oval (at 66.04 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 77 | (pad A7 thru_hole oval (at 68.58 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 78 | (pad A8 thru_hole oval (at 73.66 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 79 | (pad A9 thru_hole oval (at 76.2 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 80 | (pad A10 thru_hole oval (at 78.74 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 81 | (pad A11 thru_hole oval (at 81.28 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 82 | (pad DAC0 thru_hole oval (at 83.82 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 83 | (pad DAC1 thru_hole oval (at 86.36 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 84 | (pad CANR thru_hole oval (at 88.9 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 85 | (pad CANT thru_hole oval (at 91.44 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 86 | (pad 5V3 thru_hole oval (at 93.98 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 87 | (pad 5V4 thru_hole oval (at 96.52 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 88 | (pad D22 thru_hole oval (at 93.98 -48.26) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 89 | (pad D23 thru_hole oval (at 96.52 -48.26) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 90 | (pad D24 thru_hole oval (at 93.98 -45.72) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 91 | (pad D25 thru_hole oval (at 96.52 -45.72) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 92 | (pad D26 thru_hole oval (at 93.98 -43.18) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 93 | (pad D27 thru_hole oval (at 96.52 -43.18) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 94 | (pad D28 thru_hole oval (at 93.98 -40.64) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 95 | (pad D29 thru_hole oval (at 96.52 -40.64) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 96 | (pad D30 thru_hole oval (at 93.98 -38.1) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 97 | (pad D31 thru_hole oval (at 96.52 -38.1) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 98 | (pad D32 thru_hole oval (at 93.98 -35.56) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 99 | (pad D33 thru_hole oval (at 96.52 -35.56) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 100 | (pad D34 thru_hole oval (at 93.98 -33.02) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 101 | (pad D35 thru_hole oval (at 96.52 -33.02) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 102 | (pad D36 thru_hole oval (at 93.98 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 103 | (pad D37 thru_hole oval (at 96.52 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 104 | (pad D38 thru_hole oval (at 93.98 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 105 | (pad D39 thru_hole oval (at 96.52 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 106 | (pad D40 thru_hole oval (at 93.98 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 107 | (pad D41 thru_hole oval (at 96.52 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 108 | (pad D42 thru_hole oval (at 93.98 -22.86) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 109 | (pad D43 thru_hole oval (at 96.52 -22.86) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 110 | (pad D44 thru_hole oval (at 93.98 -20.32) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 111 | (pad D45 thru_hole oval (at 96.52 -20.32) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 112 | (pad D46 thru_hole oval (at 93.98 -17.78) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 113 | (pad D47 thru_hole oval (at 96.52 -17.78) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 114 | (pad D48 thru_hole oval (at 93.98 -15.24) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 115 | (pad D49 thru_hole oval (at 96.52 -15.24) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 116 | (pad D50 thru_hole oval (at 93.98 -12.7) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 117 | (pad D51 thru_hole oval (at 96.52 -12.7) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 118 | (pad D52 thru_hole oval (at 93.98 -10.16) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 119 | (pad D53 thru_hole oval (at 96.52 -10.16) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 120 | (pad GND5 thru_hole oval (at 93.98 -7.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 121 | (pad GND6 thru_hole oval (at 96.52 -7.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 122 | (pad MISO thru_hole oval (at 63.627 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 123 | ) 124 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Leonardo_Shield.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Leonardo_Shield (layer F.Cu) (tedit 5A8605E1) 2 | (descr https://store.arduino.cc/arduino-leonardo-with-headers) 3 | (fp_text reference XA** (at 2.54 -54.356) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Leonardo_Shield (at 15.494 -54.356) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_text user . (at 62.484 -32.004) (layer F.SilkS) 10 | (effects (font (size 1 1) (thickness 0.15))) 11 | ) 12 | (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 13 | (fp_line (start -1.905 -3.175) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 14 | (fp_line (start -1.905 -12.065) (end -1.905 -3.175) (layer B.CrtYd) (width 0.15)) 15 | (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer B.CrtYd) (width 0.15)) 16 | (fp_line (start 0 -53.34) (end 0 0) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 66.04 -40.64) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 68.58 -38.1) (end 66.04 -40.64) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start 68.58 -3.81) (end 68.58 -38.1) (layer F.SilkS) (width 0.15)) 20 | (fp_line (start 66.04 -1.27) (end 68.58 -3.81) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 66.04 0) (end 66.04 -1.27) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 64.516 -53.34) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 0 0) (end 66.04 0) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 0 -53.34) (end 64.516 -53.34) (layer F.SilkS) (width 0.15)) 25 | (pad RST2 thru_hole oval (at 63.627 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 26 | (pad GND4 thru_hole oval (at 66.167 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 27 | (pad MOSI thru_hole oval (at 66.167 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 28 | (pad SCK thru_hole oval (at 63.627 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 29 | (pad 5V2 thru_hole oval (at 66.167 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad A0 thru_hole oval (at 50.8 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad VIN thru_hole oval (at 45.72 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad GND3 thru_hole oval (at 43.18 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad GND2 thru_hole oval (at 40.64 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad 5V1 thru_hole oval (at 38.1 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad 3V3 thru_hole oval (at 35.56 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad RST1 thru_hole oval (at 33.02 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad IORF thru_hole oval (at 30.48 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad D0 thru_hole oval (at 63.5 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad D1 thru_hole oval (at 60.96 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad D2 thru_hole oval (at 58.42 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad D3 thru_hole oval (at 55.88 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D4 thru_hole oval (at 53.34 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D5 thru_hole oval (at 50.8 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad D6 thru_hole oval (at 48.26 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad D7 thru_hole oval (at 45.72 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad GND1 thru_hole oval (at 26.416 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D8 thru_hole oval (at 41.656 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D9 thru_hole oval (at 39.116 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D10 thru_hole oval (at 36.576 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad "" np_thru_hole circle (at 66.04 -7.62) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 51 | (pad "" np_thru_hole circle (at 66.04 -35.56) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 52 | (pad "" np_thru_hole circle (at 15.24 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 53 | (pad "" np_thru_hole circle (at 13.97 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 54 | (pad SCL thru_hole oval (at 18.796 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 55 | (pad SDA thru_hole oval (at 21.336 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 56 | (pad AREF thru_hole oval (at 23.876 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 57 | (pad D13 thru_hole oval (at 28.956 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 58 | (pad D12 thru_hole oval (at 31.496 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 59 | (pad D11 thru_hole oval (at 34.036 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 60 | (pad "" thru_hole oval (at 27.94 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 61 | (pad A1 thru_hole oval (at 53.34 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 62 | (pad A2 thru_hole oval (at 55.88 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 63 | (pad A3 thru_hole oval (at 58.42 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 64 | (pad A4 thru_hole oval (at 60.96 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 65 | (pad A5 thru_hole oval (at 63.5 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 66 | (pad MISO thru_hole oval (at 63.627 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 67 | ) 68 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Mega2560_Shield.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Mega2560_Shield (layer F.Cu) (tedit 5A8605D3) 2 | (descr https://store.arduino.cc/arduino-mega-2560-rev3) 3 | (fp_text reference XA** (at 2.54 -54.356) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Mega2560_Shield (at 15.494 -54.356) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_line (start 9.525 -32.385) (end -6.35 -32.385) (layer B.CrtYd) (width 0.15)) 10 | (fp_line (start 9.525 -43.815) (end -6.35 -43.815) (layer B.CrtYd) (width 0.15)) 11 | (fp_line (start 9.525 -43.815) (end 9.525 -32.385) (layer B.CrtYd) (width 0.15)) 12 | (fp_line (start -6.35 -43.815) (end -6.35 -32.385) (layer B.CrtYd) (width 0.15)) 13 | (fp_text user . (at 62.484 -32.004) (layer F.SilkS) 14 | (effects (font (size 1 1) (thickness 0.15))) 15 | ) 16 | (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 17 | (fp_line (start -1.905 -3.175) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 18 | (fp_line (start -1.905 -12.065) (end -1.905 -3.175) (layer B.CrtYd) (width 0.15)) 19 | (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer B.CrtYd) (width 0.15)) 20 | (fp_line (start 0 -53.34) (end 0 0) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 99.06 -40.64) (end 99.06 -51.816) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 101.6 -38.1) (end 99.06 -40.64) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 101.6 -3.81) (end 101.6 -38.1) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 99.06 -1.27) (end 101.6 -3.81) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 99.06 0) (end 99.06 -1.27) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start 97.536 -53.34) (end 99.06 -51.816) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start 0 0) (end 99.06 0) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start 0 -53.34) (end 97.536 -53.34) (layer F.SilkS) (width 0.15)) 29 | (pad RST2 thru_hole oval (at 63.627 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad GND4 thru_hole oval (at 66.167 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad MOSI thru_hole oval (at 66.167 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad SCK thru_hole oval (at 63.627 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad 5V2 thru_hole oval (at 66.167 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad A0 thru_hole oval (at 50.8 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad VIN thru_hole oval (at 45.72 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad GND3 thru_hole oval (at 43.18 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad GND2 thru_hole oval (at 40.64 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad 5V1 thru_hole oval (at 38.1 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad 3V3 thru_hole oval (at 35.56 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad RST1 thru_hole oval (at 33.02 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad IORF thru_hole oval (at 30.48 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D21 thru_hole oval (at 86.36 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D20 thru_hole oval (at 83.82 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad D19 thru_hole oval (at 81.28 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad D18 thru_hole oval (at 78.74 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad D17 thru_hole oval (at 76.2 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D16 thru_hole oval (at 73.66 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D15 thru_hole oval (at 71.12 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D14 thru_hole oval (at 68.58 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad D0 thru_hole oval (at 63.5 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 51 | (pad D1 thru_hole oval (at 60.96 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 52 | (pad D2 thru_hole oval (at 58.42 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 53 | (pad D3 thru_hole oval (at 55.88 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 54 | (pad D4 thru_hole oval (at 53.34 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 55 | (pad D5 thru_hole oval (at 50.8 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 56 | (pad D6 thru_hole oval (at 48.26 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 57 | (pad D7 thru_hole oval (at 45.72 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 58 | (pad GND1 thru_hole oval (at 26.416 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 59 | (pad D8 thru_hole oval (at 41.656 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 60 | (pad D9 thru_hole oval (at 39.116 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 61 | (pad D10 thru_hole oval (at 36.576 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 62 | (pad "" np_thru_hole circle (at 66.04 -7.62) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 63 | (pad "" np_thru_hole circle (at 66.04 -35.56) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 64 | (pad "" np_thru_hole circle (at 90.17 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 65 | (pad "" np_thru_hole circle (at 15.24 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 66 | (pad "" np_thru_hole circle (at 96.52 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 67 | (pad "" np_thru_hole circle (at 13.97 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 68 | (pad SCL thru_hole oval (at 18.796 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 69 | (pad SDA thru_hole oval (at 21.336 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 70 | (pad AREF thru_hole oval (at 23.876 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 71 | (pad D13 thru_hole oval (at 28.956 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 72 | (pad D12 thru_hole oval (at 31.496 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 73 | (pad D11 thru_hole oval (at 34.036 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 74 | (pad "" thru_hole oval (at 27.94 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 75 | (pad A1 thru_hole oval (at 53.34 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 76 | (pad A2 thru_hole oval (at 55.88 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 77 | (pad A3 thru_hole oval (at 58.42 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 78 | (pad A4 thru_hole oval (at 60.96 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 79 | (pad A5 thru_hole oval (at 63.5 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 80 | (pad A6 thru_hole oval (at 66.04 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 81 | (pad A7 thru_hole oval (at 68.58 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 82 | (pad A8 thru_hole oval (at 73.66 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 83 | (pad A9 thru_hole oval (at 76.2 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 84 | (pad A10 thru_hole oval (at 78.74 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 85 | (pad A11 thru_hole oval (at 81.28 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 86 | (pad A12 thru_hole oval (at 83.82 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 87 | (pad A13 thru_hole oval (at 86.36 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 88 | (pad A14 thru_hole oval (at 88.9 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 89 | (pad A15 thru_hole oval (at 91.44 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 90 | (pad 5V3 thru_hole oval (at 93.98 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 91 | (pad 5V4 thru_hole oval (at 96.52 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 92 | (pad D22 thru_hole oval (at 93.98 -48.26) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 93 | (pad D23 thru_hole oval (at 96.52 -48.26) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 94 | (pad D24 thru_hole oval (at 93.98 -45.72) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 95 | (pad D25 thru_hole oval (at 96.52 -45.72) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 96 | (pad D26 thru_hole oval (at 93.98 -43.18) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 97 | (pad D27 thru_hole oval (at 96.52 -43.18) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 98 | (pad D28 thru_hole oval (at 93.98 -40.64) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 99 | (pad D29 thru_hole oval (at 96.52 -40.64) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 100 | (pad D30 thru_hole oval (at 93.98 -38.1) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 101 | (pad D31 thru_hole oval (at 96.52 -38.1) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 102 | (pad D32 thru_hole oval (at 93.98 -35.56) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 103 | (pad D33 thru_hole oval (at 96.52 -35.56) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 104 | (pad D34 thru_hole oval (at 93.98 -33.02) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 105 | (pad D35 thru_hole oval (at 96.52 -33.02) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 106 | (pad D36 thru_hole oval (at 93.98 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 107 | (pad D37 thru_hole oval (at 96.52 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 108 | (pad D38 thru_hole oval (at 93.98 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 109 | (pad D39 thru_hole oval (at 96.52 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 110 | (pad D40 thru_hole oval (at 93.98 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 111 | (pad D41 thru_hole oval (at 96.52 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 112 | (pad D42 thru_hole oval (at 93.98 -22.86) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 113 | (pad D43 thru_hole oval (at 96.52 -22.86) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 114 | (pad D44 thru_hole oval (at 93.98 -20.32) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 115 | (pad D45 thru_hole oval (at 96.52 -20.32) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 116 | (pad D46 thru_hole oval (at 93.98 -17.78) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 117 | (pad D47 thru_hole oval (at 96.52 -17.78) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 118 | (pad D48 thru_hole oval (at 93.98 -15.24) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 119 | (pad D49 thru_hole oval (at 96.52 -15.24) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 120 | (pad D50 thru_hole oval (at 93.98 -12.7) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 121 | (pad D51 thru_hole oval (at 96.52 -12.7) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 122 | (pad D52 thru_hole oval (at 93.98 -10.16) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 123 | (pad D53 thru_hole oval (at 96.52 -10.16) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 124 | (pad GND5 thru_hole oval (at 93.98 -7.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 125 | (pad GND6 thru_hole oval (at 96.52 -7.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 126 | (pad MISO thru_hole oval (at 63.627 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 127 | ) 128 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Micro_Socket.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Micro_Socket (layer F.Cu) (tedit 5A860566) 2 | (descr https://store.arduino.cc/arduino-micro) 3 | (fp_text reference XA** (at 2.54 -19.05) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Micro_Socket (at 15.494 -19.05) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_text user 3.3V (at 6.46 -2.794) (layer F.SilkS) 10 | (effects (font (size 0.5 0.5) (thickness 0.075))) 11 | ) 12 | (fp_text user USB (at -1.016 -9.017 90) (layer F.SilkS) 13 | (effects (font (size 0.5 0.5) (thickness 0.075))) 14 | ) 15 | (fp_line (start -2.032 0.254) (end -2.286 0.254) (layer F.CrtYd) (width 0.15)) 16 | (fp_line (start -2.286 0.254) (end -2.286 -17.526) (layer F.CrtYd) (width 0.15)) 17 | (fp_line (start -2.286 -17.526) (end -2.286 -18.288) (layer F.CrtYd) (width 0.15)) 18 | (fp_line (start -2.286 -18.288) (end 48.768 -18.288) (layer F.CrtYd) (width 0.15)) 19 | (fp_line (start 48.768 -18.288) (end 48.768 0.254) (layer F.CrtYd) (width 0.15)) 20 | (fp_line (start 48.768 0.254) (end -2.032 0.254) (layer F.CrtYd) (width 0.15)) 21 | (fp_line (start -2 -18.034) (end -2 0) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 48.48 -18) (end 48.48 0) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start -2 -18.034) (end 48.48 -18.034) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 0 -18) (end 0 0) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start -2 0) (end 48.48 0) (layer F.SilkS) (width 0.15)) 26 | (pad "" np_thru_hole circle (at 47.1 -16.62) (size 1.016 1.016) (drill 1.016) (layers *.Cu *.Mask)) 27 | (pad "" np_thru_hole circle (at 1.38 -16.62) (size 1.016 1.016) (drill 1.016) (layers *.Cu *.Mask)) 28 | (pad "" np_thru_hole circle (at 47.1 -1.38) (size 1.016 1.016) (drill 1.016) (layers *.Cu *.Mask)) 29 | (pad "" thru_hole oval (at 26.78 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad RST2 thru_hole oval (at 34.4 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad MOSI thru_hole rect (at 44.56 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad SCK thru_hole oval (at 44.56 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad A0 thru_hole oval (at 11.54 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad VIN thru_hole oval (at 39.48 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad GND2 thru_hole oval (at 31.86 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad GND1 thru_hole oval (at 36.94 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad 5V thru_hole oval (at 31.86 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad 3V3 thru_hole oval (at 6.46 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad RST1 thru_hole oval (at 34.4 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad SS thru_hole oval (at 42.02 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad D0 thru_hole oval (at 36.94 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D1 thru_hole oval (at 39.48 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D2 thru_hole oval (at 29.32 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad D3 thru_hole oval (at 26.78 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad D4 thru_hole oval (at 24.24 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad D5 thru_hole oval (at 21.7 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D6 thru_hole oval (at 19.16 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D7 thru_hole oval (at 16.62 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D8 thru_hole oval (at 14.08 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad D9 thru_hole oval (at 11.54 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 51 | (pad D10 thru_hole oval (at 9 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 52 | (pad "" np_thru_hole circle (at 1.38 -1.38) (size 1.016 1.016) (drill 1.016) (layers *.Cu *.Mask)) 53 | (pad AREF thru_hole oval (at 9 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 54 | (pad D13 thru_hole oval (at 3.92 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 55 | (pad D12 thru_hole oval (at 3.92 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 56 | (pad D11 thru_hole oval (at 6.46 -16.62) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 57 | (pad "" thru_hole oval (at 29.32 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 58 | (pad A1 thru_hole oval (at 14.08 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 59 | (pad A2 thru_hole oval (at 16.62 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 60 | (pad A3 thru_hole oval (at 19.16 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 61 | (pad A4 thru_hole oval (at 21.7 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 62 | (pad A5 thru_hole oval (at 24.24 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 63 | (pad MISO thru_hole oval (at 42.02 -1.38) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 64 | ) 65 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Mini_Socket.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Mini_Socket (layer F.Cu) (tedit 5A87789E) 2 | (descr https://store.arduino.cc/arduino-mini-05) 3 | (fp_text reference XA** (at 2.54 -31.496) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Mini_Socket (at 8.89 -15.24 90) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_line (start -0.254 0.254) (end -0.254 -30.734) (layer F.CrtYd) (width 0.15)) 10 | (fp_line (start -0.254 -30.734) (end 18.034 -30.734) (layer F.CrtYd) (width 0.15)) 11 | (fp_line (start 18.034 -30.734) (end 18.034 0.254) (layer F.CrtYd) (width 0.15)) 12 | (fp_line (start 18.034 0.254) (end -0.254 0.254) (layer F.CrtYd) (width 0.15)) 13 | (fp_text user RST (at 14.986 -24.13 90) (layer F.SilkS) 14 | (effects (font (size 0.5 0.5) (thickness 0.075))) 15 | ) 16 | (fp_line (start 0 0) (end 0 -30.48) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 0 -30.48) (end 17.78 -30.48) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 17.78 -30.48) (end 17.78 0) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start 17.78 0) (end 0 0) (layer F.SilkS) (width 0.15)) 20 | (pad GND3 thru_hole circle (at 13.97 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 21 | (pad 5V2 thru_hole circle (at 11.43 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 22 | (pad RX thru_hole circle (at 8.89 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 23 | (pad TX thru_hole circle (at 6.35 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 24 | (pad L2 thru_hole rect (at 3.81 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 25 | (pad D11 thru_hole circle (at 16.51 -3.81) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 26 | (pad D12 thru_hole circle (at 16.51 -6.35) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 27 | (pad D13 thru_hole circle (at 16.51 -8.89) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 28 | (pad A0 thru_hole circle (at 16.51 -11.43) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 29 | (pad A1 thru_hole circle (at 16.51 -13.97) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad A2 thru_hole circle (at 16.51 -16.51) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad A3 thru_hole circle (at 16.51 -19.05) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad 5V1 thru_hole circle (at 16.51 -21.59) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad RST2 thru_hole circle (at 16.51 -24.13) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad GND2 thru_hole circle (at 16.51 -26.67) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad VIN thru_hole rect (at 16.51 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad D10 thru_hole circle (at 16.51 -1.27) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad GND4 thru_hole rect (at 13.97 -1.27) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad 5V3 thru_hole circle (at 11.43 -1.27) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad A6 thru_hole circle (at 3.81 -3.81) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad A7 thru_hole circle (at 6.35 -3.81) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad A5 thru_hole circle (at 6.35 -1.27) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D1 thru_hole rect (at 1.27 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D0 thru_hole circle (at 1.27 -26.67) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad L0 thru_hole circle (at 1.27 -24.13) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad L1 thru_hole circle (at 1.27 -21.59) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad D2 thru_hole circle (at 1.27 -19.05) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D3 thru_hole circle (at 1.27 -16.51) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D4 thru_hole circle (at 1.27 -13.97) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D5 thru_hole circle (at 1.27 -11.43) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad D6 thru_hole circle (at 1.27 -8.89) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 51 | (pad D7 thru_hole circle (at 1.27 -6.35) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 52 | (pad D8 thru_hole circle (at 1.27 -3.81) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 53 | (pad A4 thru_hole rect (at 3.81 -1.27) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 54 | (pad D9 thru_hole circle (at 1.27 -1.27) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 55 | ) 56 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Nano_Socket.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Nano_Socket (layer F.Cu) (tedit 5A860395) 2 | (descr https://store.arduino.cc/arduino-nano) 3 | (fp_text reference XA** (at 6.604 1.016) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Nano_Socket (at 0 -21.082 90) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_text user USB (at 0 0.635) (layer F.SilkS) 10 | (effects (font (size 0.5 0.5) (thickness 0.075))) 11 | ) 12 | (fp_text user 3.3V (at 6.35 -6.35 90) (layer F.SilkS) 13 | (effects (font (size 0.5 0.5) (thickness 0.075))) 14 | ) 15 | (fp_text user ICSP (at 0 -40.64) (layer F.Fab) 16 | (effects (font (size 1 1) (thickness 0.15))) 17 | ) 18 | (fp_circle (center 0 -39.37) (end 0.508 -39.37) (layer F.Fab) (width 0.15)) 19 | (fp_circle (center 2.54 -39.37) (end 3.048 -39.37) (layer F.Fab) (width 0.15)) 20 | (fp_circle (center 2.54 -41.91) (end 3.048 -41.91) (layer F.Fab) (width 0.15)) 21 | (fp_circle (center -2.54 -39.37) (end -2.032 -39.37) (layer F.Fab) (width 0.15)) 22 | (fp_circle (center 0 -41.91) (end 0.508 -41.91) (layer F.Fab) (width 0.15)) 23 | (fp_circle (center -2.54 -41.91) (end -2.032 -41.91) (layer F.Fab) (width 0.15)) 24 | (fp_line (start -3.302 1.778) (end -9.144 1.778) (layer F.CrtYd) (width 0.15)) 25 | (fp_line (start -9.144 1.778) (end -9.144 -22.606) (layer F.CrtYd) (width 0.15)) 26 | (fp_line (start -9.144 -22.606) (end -9.144 -43.434) (layer F.CrtYd) (width 0.15)) 27 | (fp_line (start -9.144 -43.434) (end 9.144 -43.434) (layer F.CrtYd) (width 0.15)) 28 | (fp_line (start 9.144 -43.434) (end 9.144 1.778) (layer F.CrtYd) (width 0.15)) 29 | (fp_line (start 9.144 1.778) (end -3.302 1.778) (layer F.CrtYd) (width 0.15)) 30 | (fp_line (start -4.064 0) (end -4.064 1.45) (layer F.SilkS) (width 0.15)) 31 | (fp_line (start -4.064 1.45) (end 4.064 1.45) (layer F.SilkS) (width 0.15)) 32 | (fp_line (start 4.064 1.45) (end 4.064 0) (layer F.SilkS) (width 0.15)) 33 | (fp_line (start -8.89 -43.18) (end 8.89 -43.18) (layer F.SilkS) (width 0.15)) 34 | (fp_line (start -8.89 0) (end 8.89 0) (layer F.SilkS) (width 0.15)) 35 | (fp_line (start 8.89 -43.18) (end 8.89 0) (layer F.SilkS) (width 0.15)) 36 | (fp_line (start -8.89 -43.18) (end -8.89 0) (layer F.SilkS) (width 0.15)) 37 | (pad VIN thru_hole circle (at 7.62 -39.37) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad GND2 thru_hole circle (at 7.62 -36.83) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad RST2 thru_hole circle (at 7.62 -34.29) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad 5V thru_hole circle (at 7.62 -31.75) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad A7 thru_hole circle (at 7.62 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad A6 thru_hole circle (at 7.62 -26.67) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad A5 thru_hole circle (at 7.62 -24.13) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad A4 thru_hole circle (at 7.62 -21.59) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad A3 thru_hole circle (at 7.62 -19.05) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad A2 thru_hole circle (at 7.62 -16.51) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad A1 thru_hole circle (at 7.62 -13.97) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad A0 thru_hole circle (at 7.62 -11.43) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad AREF thru_hole circle (at 7.62 -8.89) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad 3V3 thru_hole circle (at 7.62 -6.35) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 51 | (pad D13 thru_hole circle (at 7.62 -3.81) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 52 | (pad D12 thru_hole circle (at -7.62 -3.81) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 53 | (pad D11 thru_hole circle (at -7.62 -6.35) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 54 | (pad D10 thru_hole circle (at -7.62 -8.89) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 55 | (pad D9 thru_hole circle (at -7.62 -11.43) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 56 | (pad D8 thru_hole circle (at -7.62 -13.97) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 57 | (pad D7 thru_hole circle (at -7.62 -16.51) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 58 | (pad D6 thru_hole circle (at -7.62 -19.05) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 59 | (pad D5 thru_hole circle (at -7.62 -21.59) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 60 | (pad D4 thru_hole circle (at -7.62 -24.13) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 61 | (pad D3 thru_hole circle (at -7.62 -26.67) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 62 | (pad D2 thru_hole circle (at -7.62 -29.21) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 63 | (pad GND1 thru_hole circle (at -7.62 -31.75) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 64 | (pad RST1 thru_hole circle (at -7.62 -34.29) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 65 | (pad D0 thru_hole circle (at -7.62 -36.83) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 66 | (pad D1 thru_hole rect (at -7.62 -39.37) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 67 | (pad "" np_thru_hole circle (at -7.62 -41.91) (size 1.85 1.85) (drill 1.85) (layers *.Cu *.Mask)) 68 | (pad "" np_thru_hole circle (at 7.62 -41.91) (size 1.85 1.85) (drill 1.85) (layers *.Cu *.Mask)) 69 | (pad "" np_thru_hole circle (at -7.62 -1.27) (size 1.85 1.85) (drill 1.85) (layers *.Cu *.Mask)) 70 | (pad "" np_thru_hole circle (at 7.62 -1.27) (size 1.85 1.85) (drill 1.85) (layers *.Cu *.Mask)) 71 | ) 72 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Uno_Shield.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Uno_Shield (layer F.Cu) (tedit 5A8605EC) 2 | (descr https://store.arduino.cc/arduino-uno-rev3) 3 | (fp_text reference XA** (at 2.54 -54.356) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Uno_Shield (at 15.494 -54.356) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_line (start 9.525 -32.385) (end -6.35 -32.385) (layer B.CrtYd) (width 0.15)) 10 | (fp_line (start 9.525 -43.815) (end -6.35 -43.815) (layer B.CrtYd) (width 0.15)) 11 | (fp_line (start 9.525 -43.815) (end 9.525 -32.385) (layer B.CrtYd) (width 0.15)) 12 | (fp_line (start -6.35 -43.815) (end -6.35 -32.385) (layer B.CrtYd) (width 0.15)) 13 | (fp_text user . (at 62.484 -32.004) (layer F.SilkS) 14 | (effects (font (size 1 1) (thickness 0.15))) 15 | ) 16 | (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 17 | (fp_line (start -1.905 -3.175) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 18 | (fp_line (start -1.905 -12.065) (end -1.905 -3.175) (layer B.CrtYd) (width 0.15)) 19 | (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer B.CrtYd) (width 0.15)) 20 | (fp_line (start 0 -53.34) (end 0 0) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 66.04 -40.64) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 68.58 -38.1) (end 66.04 -40.64) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 68.58 -3.81) (end 68.58 -38.1) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 66.04 -1.27) (end 68.58 -3.81) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 66.04 0) (end 66.04 -1.27) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start 64.516 -53.34) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start 0 0) (end 66.04 0) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start 0 -53.34) (end 64.516 -53.34) (layer F.SilkS) (width 0.15)) 29 | (pad RST2 thru_hole oval (at 63.627 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad GND4 thru_hole oval (at 66.167 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad MOSI thru_hole oval (at 66.167 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad SCK thru_hole oval (at 63.627 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad 5V2 thru_hole oval (at 66.167 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad A0 thru_hole oval (at 50.8 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad VIN thru_hole oval (at 45.72 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad GND3 thru_hole oval (at 43.18 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad GND2 thru_hole oval (at 40.64 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad 5V1 thru_hole oval (at 38.1 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad 3V3 thru_hole oval (at 35.56 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad RST1 thru_hole oval (at 33.02 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad IORF thru_hole oval (at 30.48 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D0 thru_hole oval (at 63.5 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D1 thru_hole oval (at 60.96 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad D2 thru_hole oval (at 58.42 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad D3 thru_hole oval (at 55.88 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad D4 thru_hole oval (at 53.34 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D5 thru_hole oval (at 50.8 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D6 thru_hole oval (at 48.26 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D7 thru_hole oval (at 45.72 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad GND1 thru_hole oval (at 26.416 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 51 | (pad D8 thru_hole oval (at 41.656 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 52 | (pad D9 thru_hole oval (at 39.116 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 53 | (pad D10 thru_hole oval (at 36.576 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 54 | (pad "" np_thru_hole circle (at 66.04 -7.62) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 55 | (pad "" np_thru_hole circle (at 66.04 -35.56) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 56 | (pad "" np_thru_hole circle (at 15.24 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 57 | (pad "" np_thru_hole circle (at 13.97 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 58 | (pad SCL thru_hole oval (at 18.796 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 59 | (pad SDA thru_hole oval (at 21.336 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 60 | (pad AREF thru_hole oval (at 23.876 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 61 | (pad D13 thru_hole oval (at 28.956 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 62 | (pad D12 thru_hole oval (at 31.496 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 63 | (pad D11 thru_hole oval (at 34.036 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 64 | (pad "" thru_hole oval (at 27.94 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 65 | (pad A1 thru_hole oval (at 53.34 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 66 | (pad A2 thru_hole oval (at 55.88 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 67 | (pad A3 thru_hole oval (at 58.42 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 68 | (pad A4 thru_hole oval (at 60.96 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 69 | (pad A5 thru_hole oval (at 63.5 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 70 | (pad MISO thru_hole oval (at 63.627 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 71 | ) 72 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/Arduino.pretty/Arduino_Zero_Shield.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Arduino_Zero_Shield (layer F.Cu) (tedit 5A8605F5) 2 | (descr https://store.arduino.cc/genuino-zero) 3 | (fp_text reference XA** (at 2.54 -54.356) (layer F.SilkS) 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value Arduino_Zero_Shield (at 15.494 -54.356) (layer F.Fab) 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_text user . (at 62.484 -32.004) (layer F.SilkS) 10 | (effects (font (size 1 1) (thickness 0.15))) 11 | ) 12 | (fp_line (start 11.43 -12.065) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 13 | (fp_line (start -1.905 -3.175) (end 11.43 -3.175) (layer B.CrtYd) (width 0.15)) 14 | (fp_line (start -1.905 -12.065) (end -1.905 -3.175) (layer B.CrtYd) (width 0.15)) 15 | (fp_line (start -1.905 -12.065) (end 11.43 -12.065) (layer B.CrtYd) (width 0.15)) 16 | (fp_line (start 0 -53.34) (end 0 0) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 66.04 -40.64) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 68.58 -38.1) (end 66.04 -40.64) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start 68.58 -3.81) (end 68.58 -38.1) (layer F.SilkS) (width 0.15)) 20 | (fp_line (start 66.04 -1.27) (end 68.58 -3.81) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 66.04 0) (end 66.04 -1.27) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 64.516 -53.34) (end 66.04 -51.816) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 0 0) (end 66.04 0) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 0 -53.34) (end 64.516 -53.34) (layer F.SilkS) (width 0.15)) 25 | (pad RST2 thru_hole oval (at 63.627 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 26 | (pad GND4 thru_hole oval (at 66.167 -25.4) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 27 | (pad MOSI thru_hole oval (at 66.167 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 28 | (pad SCK thru_hole oval (at 63.627 -27.94) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 29 | (pad 5V2 thru_hole oval (at 66.167 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 30 | (pad A0 thru_hole oval (at 50.8 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 31 | (pad VIN thru_hole oval (at 45.72 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 32 | (pad GND3 thru_hole oval (at 43.18 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 33 | (pad GND2 thru_hole oval (at 40.64 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 34 | (pad 5V1 thru_hole oval (at 38.1 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 35 | (pad 3V3 thru_hole oval (at 35.56 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 36 | (pad RST1 thru_hole oval (at 33.02 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 37 | (pad IORF thru_hole oval (at 30.48 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 38 | (pad D0 thru_hole oval (at 63.5 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 39 | (pad D1 thru_hole oval (at 60.96 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 40 | (pad D2 thru_hole oval (at 58.42 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 41 | (pad D3 thru_hole oval (at 55.88 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 42 | (pad D4 thru_hole oval (at 53.34 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 43 | (pad D5 thru_hole oval (at 50.8 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 44 | (pad D6 thru_hole oval (at 48.26 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 45 | (pad D7 thru_hole oval (at 45.72 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 46 | (pad GND1 thru_hole oval (at 26.416 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 47 | (pad D8 thru_hole oval (at 41.656 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 48 | (pad D9 thru_hole oval (at 39.116 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 49 | (pad D10 thru_hole oval (at 36.576 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 50 | (pad "" np_thru_hole circle (at 66.04 -7.62) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 51 | (pad "" np_thru_hole circle (at 66.04 -35.56) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 52 | (pad "" np_thru_hole circle (at 15.24 -50.8) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 53 | (pad "" np_thru_hole circle (at 13.97 -2.54) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 54 | (pad SCL thru_hole oval (at 18.796 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 55 | (pad SDA thru_hole oval (at 21.336 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 56 | (pad AREF thru_hole oval (at 23.876 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 57 | (pad D13 thru_hole oval (at 28.956 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 58 | (pad D12 thru_hole oval (at 31.496 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 59 | (pad D11 thru_hole oval (at 34.036 -50.8) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 60 | (pad ATN thru_hole oval (at 27.94 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 61 | (pad A1 thru_hole oval (at 53.34 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 62 | (pad A2 thru_hole oval (at 55.88 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 63 | (pad A3 thru_hole oval (at 58.42 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 64 | (pad A4 thru_hole oval (at 60.96 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 65 | (pad A5 thru_hole oval (at 63.5 -2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 66 | (pad MISO thru_hole oval (at 63.627 -30.48) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)) 67 | ) 68 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/README.md: -------------------------------------------------------------------------------- 1 | # Arduino KiCad Library 2 | *Version 1.4.1* 3 | 4 | Library of schematic components and footprints of common Arduino boards for KiCad. 5 | 6 | Currently included are: 7 | - Arduino 101 Shield 8 | - Arduino Due Shield 9 | - Arduino Leonardo Shied 10 | - Arduino M0 Shield 11 | - Arduino M0 Pro Shield 12 | - Arduino Mega 2560 Shield 13 | - Arduino Micro Socket 14 | - Arduino Mini Socket 15 | - Arduino Nano Socket 16 | - Arduino Uno Shield 17 | - Arduino Zero Shield 18 | 19 | Shield means the Arduino is designed to plug in from beneath your PCB; socket means it is designed to plug in from above. 20 | 21 | ## Comments, Requests, Bugs & Contributions 22 | All are welcome. 23 | Please file an Issue or Pull Request at https://github.com/Alarm-Siren/arduino-kicad-library 24 | 25 | ## License 26 | Copyright 2017-2018, Nicholas Parks Young. All Rights Reserved. 27 | This library is licensed under the GNU LGPL v2.1, which can be found in file LICENSE.txt. 28 | 29 | ## Donations 30 | 31 | If you've found this library useful and you'd like to make a donation towards its continued upkeep, click the button below: 32 | 33 | [![paypal](https://www.paypalobjects.com/en_GB/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UX25HM4CZFFWW) 34 | 35 | ## Library Setup 36 | To add this library to your KiCad Project, do the following steps: 37 | 1. Copy the source files to your Project. Make sure that the Arduino.pretty folder structure is preserved. 38 | 2. In Eeschema (the schematic editor of KiCad) go to Preferences -> Component Libraries. Click the "Add" button next to "Component library files". 39 | 3. Navigate to your project folder, select "arduino.lib" and click "open". 40 | 4. You may wish to adjust the newly added arduino schematic library to be near the top of the load order using the "Up" and "Down" buttons, but this is optional and is only relevant if you have other libraries that use the same names for parts. 41 | 5. OK out and exit Eeschema. Open Pcbnew (the PCB editor of KiCad) go to Preferences -> Footprint Libraries Manager. 42 | 6. Select the "Project Specific Libraries" tab and then click "Append Library". 43 | 7. In the new line of the table, set Library Path to "$(KIPRJMOD)\Arduino.pretty" on Windows or "$(KIPRJMOD)/Arduino.pretty" on Linux/Mac, and ensure Plugin Type is "KiCad". Options and Description can be left blank. You should set Nickname to something descriptive - like "Arduino" for example! 44 | 8. All done: you are now ready to use these schematic components and footprints! 45 | 46 | ## A note about Power and Reset pins 47 | 48 | ### Power 49 | On the Arduino Platform, it is not possible to categorically state that the power pins are "power inputs" or "power outputs", as that depends on exactly how you're using the Arduino. For example, if you're powering the Arduino from USB then GND, +3.3V and +5V would be power outputs and VIN would do nothing, whereas if you're powering the Arduino from a battery via your Shield then VIN and GND are power inputs whilst +5V and +3.3V are power outputs. There are other, more esoteric possibilities too. 50 | 51 | Regardless of the above, I needed to make a decision about what electrical type to apply to these pins. I could use something like Passive or Unspecified, but then KiCad's Electrical Rules Checker (ERC) tool would not be effective in catching errors on these pins at all, whilst using Power Output means it objects to you joining pins together (for example, joining all the GND pins into a common net) even when that's OK in some situations. 52 | 53 | Therefore, I have decided to use Power Input as this presents the least issues. This means if you're actually using any of the power pins as Power Outputs in your schematic, by default the ERC will complain that the relevant nets are undriven. To fix this you will need to add the special "PWR_FLAG" component to the affected net. 54 | 55 | ### Reset 56 | Reset pins on the Arduino Platform have interesting electrical characteristics, which mean that no KiCad electrical type exactly matches their functionality. I settled on Open Collector as the nearest candidate, but unlike a true Open Collector pin on an integrated circuit, the reset pins on the Arduino Platform have an internal weak pull-up, and the reset button that can strongly pull low, so your circuit needs to be able to cope with all these situations. 57 | 58 | In other words, if you use the reset pin as an input to your shield then you do not need to add a pull-up (doing so will actually make it less responsive if not break it); conversely if you want to drive the reset line in order to reset the Arduino you need to ensure that you only ever pull it low - if you pull it high at the same time as an unwitting user hits the physical reset button, you've created a short between power and ground which will likely fry whatever chip is on your shield. 59 | 60 | ### TL;DR: 61 | 62 | *The KiCad ERC cannot catch all the possible electrical errors on your schematic as it doesn't natively support the reset and power pins' electrical types. Even if the ERC says its OK, double check it manually.* 63 | 64 | *If the ERC says that your power pins are undriven, first manually check they are being driven. If they are driven, then add a "PWR_FLAG" component to the net to make the error go away.* 65 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/arduino-kicad-library/arduino.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | $CMP Arduino_101_Shield 4 | D Shield for Arduino 101 5 | K Arduino MPU Shield 6 | F https://store.arduino.cc/genuino-101 7 | $ENDCMP 8 | # 9 | $CMP Arduino_Due_Shield 10 | D Shield for Arduino Due 11 | K Arduino MPU Shield 12 | F https://store.arduino.cc/arduino-due 13 | $ENDCMP 14 | # 15 | $CMP Arduino_Leonardo_Shield 16 | D Shield for Arduino Leonardo 17 | K Arduino MPU Shield 18 | F https://store.arduino.cc/arduino-leonardo-with-headers 19 | $ENDCMP 20 | # 21 | $CMP Arduino_M0_Pro_Shield 22 | D Shield for Arduino M0 Pro 23 | K Arduino MPU Shield 24 | F https://store.arduino.cc/arduino-m0-pro 25 | $ENDCMP 26 | # 27 | $CMP Arduino_M0_Shield 28 | D Shield for Arduino M0 29 | K Arduino MPU Shield 30 | F https://store.arduino.cc/arduino-m0 31 | $ENDCMP 32 | # 33 | $CMP Arduino_Mega2560_Shield 34 | D Shield for Arduino Mega 2560 35 | K Arduino MPU Shield 36 | F https://store.arduino.cc/arduino-mega-2560-rev3 37 | $ENDCMP 38 | # 39 | $CMP Arduino_Micro_Socket 40 | D Socket for Arduino Micro 41 | K Arduino MPU Shield 42 | F https://store.arduino.cc/arduino-micro 43 | $ENDCMP 44 | # 45 | $CMP Arduino_Mini_01_Socket 46 | D Socket for Arduino Mini 01 47 | K Arduino MPU Shield 48 | F https://store.arduino.cc/arduino-mini-05 49 | $ENDCMP 50 | # 51 | $CMP Arduino_Mini_02_Socket 52 | D Socket for Arduino Mini 02 53 | K Arduino MPU Shield 54 | F https://store.arduino.cc/arduino-mini-05 55 | $ENDCMP 56 | # 57 | $CMP Arduino_Mini_03_Socket 58 | D Socket for Arduino Mini 03 59 | K Arduino MPU Shield 60 | F https://store.arduino.cc/arduino-mini-05 61 | $ENDCMP 62 | # 63 | $CMP Arduino_Mini_04_Socket 64 | D Socket for Arduino Mini 04 65 | K Arduino MPU Shield 66 | F https://store.arduino.cc/arduino-mini-05 67 | $ENDCMP 68 | # 69 | $CMP Arduino_Mini_05_Socket 70 | D Socket for Arduino Mini 05 71 | K Arduino MPU Shield 72 | F https://store.arduino.cc/arduino-mini-05 73 | $ENDCMP 74 | # 75 | $CMP Arduino_Nano_Socket 76 | D Socket for Arduino Nano 77 | K Arduino MPU Shield 78 | F https://store.arduino.cc/arduino-nano 79 | $ENDCMP 80 | # 81 | $CMP Arduino_Uno_Shield 82 | D Shield for Arduino Uno 83 | K Arduino MPU Shield 84 | F https://store.arduino.cc/arduino-uno-rev3 85 | $ENDCMP 86 | # 87 | $CMP Arduino_Zero_Shield 88 | D Shield for Arduino Zero 89 | K Arduino MPU Shield 90 | F https://store.arduino.cc/genuino-zero 91 | $ENDCMP 92 | # 93 | #End Doc Library 94 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name ArduinoShields)(type KiCad)(uri ${KIPRJMOD}/arduino-kicad-library/Arduino.pretty)(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev0.pdf -------------------------------------------------------------------------------- /hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev0.zip -------------------------------------------------------------------------------- /hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev2.pdf -------------------------------------------------------------------------------- /hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/68k-Supervisor/revisions/68kBoardSupervisorShield-rev2.zip -------------------------------------------------------------------------------- /hardware/68k-Supervisor/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name "ArduinoShields")(type "Legacy")(uri "${KIPRJMOD}/arduino-kicad-library/arduino.lib")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/README.md: -------------------------------------------------------------------------------- 1 | 2 | The Z80 Not Quite Computer 3 | ========================== 4 | 5 | A simple platform for experimenting with Z80 CPUs. The Z80Proto board has a Z80 CPU, with a 32KB SRAM chip and a 32KB EEPROM 6 | chip, along with a bus of pins for connecting to other things. It also has a simple clock circuit that can optionally be used. 7 | It does not have any onboard I/O, or an onboard power supply (hence why it's not quite a computer). The intention is to connect 8 | the bus pins to an Arduino Mega, which acts as a supervisor, controlling the CPU through the BUSREQ and RESET lines, and 9 | emulating I/O devices. It was made partly to try out some 3rd party PCB manufacturers and partly because of signal issues when 10 | breadboarding circuits with so many wires, which was causing memory read errors. 11 | 12 | Z80Supervisor is an arduino program which can run or stop the CPU, and read and write to memory directly (when the CPU is 13 | suspended). It is also able to respond to memory bus requests from the CPU, as long as the CPU is running with a slow clock. 14 | It can both act as a ROM, serving up a Z80 program, and act as an I/O device by forwarding bytes on to the arduino's serial 15 | port. 16 | 17 | Z80Monitor contains programs that run on the Z80, which can either be loaded into the EEPROM, or served by the supervisor. 18 | 19 | 20 | Schematic 21 | --------- 22 | 23 | ![alt text](https://github.com/transistorfet/computie/raw/main/hardware/Z80-NQC/Z80Proto/Z80Proto.png "Z80 NQC Proto Board") 24 | 25 | 26 | Board 27 | ----- 28 | 29 | ![alt text](https://github.com/transistorfet/computie/raw/main/hardware/Z80-NQC/images/Z80-NCQ-Built.jpg "Z80 NQC Proto Board") 30 | ![alt text](https://github.com/transistorfet/computie/raw/main/hardware/Z80-NQC/images/Z80-NCQ-Board-Front.jpg "Z80 NQC Proto Board") 31 | ![alt text](https://github.com/transistorfet/computie/raw/main/hardware/Z80-NQC/images/Z80-NCQ-Board-Back.jpg "Z80 NQC Proto Board") 32 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Monitor/Makefile: -------------------------------------------------------------------------------- 1 | 2 | 3 | all: rom 4 | 5 | 6 | rom: welcome.bin 7 | hexdump -v -e '/1 "0x%02x, "' $<; echo "" 8 | 9 | memtest: memtest.bin 10 | hexdump -v -e '/1 "0x%02x, "' $<; echo "" 11 | 12 | %.bin: %.asm 13 | z80asm -o $@ $< 14 | 15 | 16 | image: image.hex 17 | objcopy -I ihex $< -O binary image.bin 18 | #hexdump -v -e '/1 "0x%02x, "' image.bin; echo "" 19 | hexdump -v -e '/1 "0x%02x, "' image.bin > output.txt 20 | z80dasm -at image.bin > image.bin.lst 21 | 22 | image.hex: main.rel crt0.o 23 | sdcc -mz80 --no-std-crt0 --code-loc 0x0100 --data-loc 0x800 --stack-loc 0x0C00 -o $@ main.rel crt0.rel 24 | 25 | %.rel: %.c 26 | sdcc -mz80 --no-std-crt0 --code-loc 0x0100 --data-loc 0x800 --stack-loc 0x0C00 -c -o $@ $< 27 | 28 | %.o: %.asm 29 | sdasz80 -l -o -s $< 30 | 31 | clean: 32 | rm *.o *.sym *.lst *.rel *.lk *.map 33 | 34 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Monitor/crt0.asm: -------------------------------------------------------------------------------- 1 | 2 | .module crt0 3 | .globl _main 4 | 5 | .globl l__INITIALIZER 6 | .globl s__INITIALIZER 7 | .globl s__INITIALIZED 8 | 9 | .area _HEADER (ABS) 10 | .org 0x0000 11 | nop ; this is to avoid a faulty (0x0000) byte 12 | jp init 13 | 14 | .org 0x08 15 | reti 16 | .org 0x10 17 | reti 18 | .org 0x18 19 | reti 20 | .org 0x20 21 | reti 22 | .org 0x28 23 | reti 24 | .org 0x30 25 | reti 26 | .org 0x38 27 | 28 | .org 0x00080 29 | 30 | init: 31 | ld sp, #0x0FFF 32 | call gsinit 33 | call _main 34 | halt 35 | 36 | .area _HOME 37 | .area _CODE 38 | .area _INITIALIZER 39 | .area _GSINIT 40 | .area _GSFINAL 41 | 42 | .area _DATA 43 | .area _INITIALIZED 44 | .area _BSEG 45 | .area _BSS 46 | .area _HEAP 47 | 48 | .area _CODE 49 | 50 | .area _GSINIT 51 | gsinit: 52 | ld bc, #l__INITIALIZER 53 | ld a, b 54 | or a, c 55 | jr Z, gsinit_next 56 | ld de, #s__INITIALIZED 57 | ld hl, #s__INITIALIZER 58 | ldir 59 | gsinit_next: 60 | .area _GSFINAL 61 | ret 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Monitor/main.c: -------------------------------------------------------------------------------- 1 | 2 | typedef unsigned char byte; 3 | typedef unsigned int word; 4 | 5 | __sfr __at (0x00F0) status; 6 | __sfr __at (0x00F1) in; 7 | __sfr __at (0x00F1) out; 8 | __sfr __at (0x00FF) led; 9 | 10 | char *msg = "Welcome to the thing!\n"; 11 | 12 | void serial_print(char *str) 13 | { 14 | byte i = 0; 15 | 16 | while (str[i] != '\0') 17 | out = str[i++]; 18 | } 19 | 20 | void serial_read_loop() 21 | { 22 | word i; 23 | byte ch; 24 | 25 | while (1) { 26 | if (status & 0x80) { 27 | ch = in; 28 | while (!(status & 0x40)) { } 29 | out = ch; 30 | } 31 | //for (i = 0; i < 10; i++) { } 32 | } 33 | } 34 | 35 | 36 | int main() 37 | { 38 | word i; 39 | 40 | led = 0x01; 41 | 42 | serial_print(msg); 43 | //serial_read_loop(); 44 | 45 | return 0; 46 | } 47 | 48 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Monitor/memtest.asm: -------------------------------------------------------------------------------- 1 | 2 | mem_addr: equ 2000h 3 | mem_size: equ 2000h 4 | 5 | org 0000h 6 | jp start 7 | 8 | org 0080h 9 | seek 0080h 10 | 11 | start: 12 | 13 | _main: 14 | 15 | ; Initialize error count to 0 16 | ld a, 00h 17 | ex af, af' 18 | 19 | ; Set LED on 20 | ld a, 01h 21 | ld (00FFh), a 22 | 23 | ; Write data to memory 24 | ld a, 01h 25 | ld bc, mem_size 26 | ld hl, mem_addr 27 | 28 | write: 29 | ld (hl), a 30 | inc hl 31 | inc a 32 | dec bc 33 | jp NZ, write 34 | 35 | ; Read data from memory 36 | ld d, 01h 37 | ld bc, mem_size 38 | ld hl, mem_addr 39 | read: 40 | ld a, (hl) 41 | cp d 42 | jp NZ, set_error 43 | ret_error: 44 | inc hl 45 | inc d 46 | dec bc 47 | jp NZ, read 48 | 49 | loop_end: 50 | 51 | ex af, af' 52 | cp 0 53 | jp Z, skip 54 | ld a, 0 55 | ld (00FFh), a 56 | skip: 57 | halt 58 | 59 | set_error: 60 | ex af, af' 61 | inc a 62 | ld (00FEh), a 63 | ex af, af' 64 | jp ret_error 65 | 66 | ; end _main 67 | 68 | ; force the size to 512 bytes 69 | seek 0200h 70 | nop 71 | 72 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Monitor/welcome.asm: -------------------------------------------------------------------------------- 1 | 2 | org 0000h 3 | jp start 4 | 5 | org 0080h 6 | seek 0080h 7 | 8 | start: 9 | ld sp, 0200h 10 | call _main 11 | halt 12 | 13 | _main: 14 | ld a, 01h 15 | out (00FFh), a 16 | 17 | ld de, msg 18 | 19 | loop: 20 | ld a, (de) 21 | cp 0 22 | jp Z, loop_end 23 | out (00F1h), a 24 | inc de 25 | jp loop 26 | 27 | loop_end: 28 | 29 | ret 30 | ; end _main 31 | 32 | msg: defm "Welcome To Bread80!\n\n\0" 33 | 34 | 35 | ; force the size to 512 bytes 36 | seek 0200h 37 | nop 38 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Proto/Z80Proto.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_nets": [], 7 | "high_contrast_mode": 0, 8 | "net_color_mode": 1, 9 | "opacity": { 10 | "pads": 1.0, 11 | "tracks": 1.0, 12 | "vias": 1.0, 13 | "zones": 0.6 14 | }, 15 | "ratsnest_display_mode": 0, 16 | "selection_filter": { 17 | "dimensions": true, 18 | "footprints": true, 19 | "graphics": true, 20 | "keepouts": true, 21 | "lockedItems": true, 22 | "otherItems": true, 23 | "pads": true, 24 | "text": true, 25 | "tracks": true, 26 | "vias": true, 27 | "zones": true 28 | }, 29 | "visible_items": [ 30 | 0, 31 | 1, 32 | 2, 33 | 3, 34 | 4, 35 | 5, 36 | 8, 37 | 9, 38 | 10, 39 | 11, 40 | 12, 41 | 13, 42 | 14, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36 64 | ], 65 | "visible_layers": "fffffff_ffffffff", 66 | "zone_display_mode": 0 67 | }, 68 | "meta": { 69 | "filename": "Z80Proto.kicad_prl", 70 | "version": 3 71 | }, 72 | "project": { 73 | "files": [] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Proto/Z80Proto.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.049999999999999996, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.09999999999999999, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.762, 37 | "height": 1.524, 38 | "width": 1.524 39 | }, 40 | "silk_line_width": 0.12, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.508 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "filename": "board_design_settings.json", 55 | "version": 2 56 | }, 57 | "rule_severities": { 58 | "annular_width": "error", 59 | "clearance": "error", 60 | "copper_edge_clearance": "error", 61 | "courtyards_overlap": "error", 62 | "diff_pair_gap_out_of_range": "error", 63 | "diff_pair_uncoupled_length_too_long": "error", 64 | "drill_out_of_range": "error", 65 | "duplicate_footprints": "warning", 66 | "extra_footprint": "warning", 67 | "footprint_type_mismatch": "error", 68 | "hole_clearance": "error", 69 | "hole_near_hole": "error", 70 | "invalid_outline": "error", 71 | "item_on_disabled_layer": "error", 72 | "items_not_allowed": "error", 73 | "length_out_of_range": "error", 74 | "malformed_courtyard": "error", 75 | "microvia_drill_out_of_range": "error", 76 | "missing_courtyard": "ignore", 77 | "missing_footprint": "warning", 78 | "net_conflict": "warning", 79 | "npth_inside_courtyard": "ignore", 80 | "padstack": "error", 81 | "pth_inside_courtyard": "ignore", 82 | "shorting_items": "error", 83 | "silk_over_copper": "warning", 84 | "silk_overlap": "warning", 85 | "skew_out_of_range": "error", 86 | "through_hole_pad_without_hole": "error", 87 | "too_many_vias": "error", 88 | "track_dangling": "warning", 89 | "track_width": "error", 90 | "tracks_crossing": "error", 91 | "unconnected_items": "error", 92 | "unresolved_variable": "error", 93 | "via_dangling": "warning", 94 | "zone_has_empty_net": "error", 95 | "zones_intersect": "error" 96 | }, 97 | "rule_severitieslegacy_courtyards_overlap": true, 98 | "rule_severitieslegacy_no_courtyard_defined": false, 99 | "rules": { 100 | "allow_blind_buried_vias": false, 101 | "allow_microvias": false, 102 | "max_error": 0.005, 103 | "min_clearance": 0.0, 104 | "min_copper_edge_clearance": 0.024999999999999998, 105 | "min_hole_clearance": 0.25, 106 | "min_hole_to_hole": 0.25, 107 | "min_microvia_diameter": 0.19999999999999998, 108 | "min_microvia_drill": 0.09999999999999999, 109 | "min_silk_clearance": 0.0, 110 | "min_through_hole_diameter": 0.39999999999999997, 111 | "min_track_width": 0.25, 112 | "min_via_annular_width": 0.049999999999999996, 113 | "min_via_diameter": 0.39999999999999997, 114 | "use_height_for_length_calcs": true 115 | }, 116 | "track_widths": [ 117 | 0.0, 118 | 1.0 119 | ], 120 | "via_dimensions": [], 121 | "zones_allow_external_fillets": false, 122 | "zones_use_no_outline": true 123 | }, 124 | "layer_presets": [] 125 | }, 126 | "boards": [], 127 | "cvpcb": { 128 | "equivalence_files": [] 129 | }, 130 | "erc": { 131 | "erc_exclusions": [], 132 | "meta": { 133 | "version": 0 134 | }, 135 | "pin_map": [ 136 | [ 137 | 0, 138 | 0, 139 | 0, 140 | 0, 141 | 0, 142 | 0, 143 | 1, 144 | 0, 145 | 0, 146 | 0, 147 | 0, 148 | 2 149 | ], 150 | [ 151 | 0, 152 | 2, 153 | 0, 154 | 1, 155 | 0, 156 | 0, 157 | 1, 158 | 0, 159 | 2, 160 | 2, 161 | 2, 162 | 2 163 | ], 164 | [ 165 | 0, 166 | 0, 167 | 0, 168 | 0, 169 | 0, 170 | 0, 171 | 1, 172 | 0, 173 | 1, 174 | 0, 175 | 1, 176 | 2 177 | ], 178 | [ 179 | 0, 180 | 1, 181 | 0, 182 | 0, 183 | 0, 184 | 0, 185 | 1, 186 | 1, 187 | 2, 188 | 1, 189 | 1, 190 | 2 191 | ], 192 | [ 193 | 0, 194 | 0, 195 | 0, 196 | 0, 197 | 0, 198 | 0, 199 | 1, 200 | 0, 201 | 0, 202 | 0, 203 | 0, 204 | 2 205 | ], 206 | [ 207 | 0, 208 | 0, 209 | 0, 210 | 0, 211 | 0, 212 | 0, 213 | 0, 214 | 0, 215 | 0, 216 | 0, 217 | 0, 218 | 2 219 | ], 220 | [ 221 | 1, 222 | 1, 223 | 1, 224 | 1, 225 | 1, 226 | 0, 227 | 1, 228 | 1, 229 | 1, 230 | 1, 231 | 1, 232 | 2 233 | ], 234 | [ 235 | 0, 236 | 0, 237 | 0, 238 | 1, 239 | 0, 240 | 0, 241 | 1, 242 | 0, 243 | 0, 244 | 0, 245 | 0, 246 | 2 247 | ], 248 | [ 249 | 0, 250 | 2, 251 | 1, 252 | 2, 253 | 0, 254 | 0, 255 | 1, 256 | 0, 257 | 2, 258 | 2, 259 | 2, 260 | 2 261 | ], 262 | [ 263 | 0, 264 | 2, 265 | 0, 266 | 1, 267 | 0, 268 | 0, 269 | 1, 270 | 0, 271 | 2, 272 | 0, 273 | 0, 274 | 2 275 | ], 276 | [ 277 | 0, 278 | 2, 279 | 1, 280 | 1, 281 | 0, 282 | 0, 283 | 1, 284 | 0, 285 | 2, 286 | 0, 287 | 0, 288 | 2 289 | ], 290 | [ 291 | 2, 292 | 2, 293 | 2, 294 | 2, 295 | 2, 296 | 2, 297 | 2, 298 | 2, 299 | 2, 300 | 2, 301 | 2, 302 | 2 303 | ] 304 | ], 305 | "rule_severities": { 306 | "bus_definition_conflict": "error", 307 | "bus_entry_needed": "error", 308 | "bus_label_syntax": "error", 309 | "bus_to_bus_conflict": "error", 310 | "bus_to_net_conflict": "error", 311 | "different_unit_footprint": "error", 312 | "different_unit_net": "error", 313 | "duplicate_reference": "error", 314 | "duplicate_sheet_names": "error", 315 | "extra_units": "error", 316 | "global_label_dangling": "warning", 317 | "hier_label_mismatch": "error", 318 | "label_dangling": "error", 319 | "lib_symbol_issues": "warning", 320 | "multiple_net_names": "warning", 321 | "net_not_bus_member": "warning", 322 | "no_connect_connected": "warning", 323 | "no_connect_dangling": "warning", 324 | "pin_not_connected": "error", 325 | "pin_not_driven": "error", 326 | "pin_to_pin": "warning", 327 | "power_pin_not_driven": "error", 328 | "similar_labels": "warning", 329 | "unannotated": "error", 330 | "unit_value_mismatch": "error", 331 | "unresolved_variable": "error", 332 | "wire_dangling": "error" 333 | } 334 | }, 335 | "libraries": { 336 | "pinned_footprint_libs": [], 337 | "pinned_symbol_libs": [] 338 | }, 339 | "meta": { 340 | "filename": "Z80Proto.kicad_pro", 341 | "version": 1 342 | }, 343 | "net_settings": { 344 | "classes": [ 345 | { 346 | "bus_width": 12.0, 347 | "clearance": 0.2, 348 | "diff_pair_gap": 0.25, 349 | "diff_pair_via_gap": 0.25, 350 | "diff_pair_width": 0.25, 351 | "line_style": 0, 352 | "microvia_diameter": 0.3, 353 | "microvia_drill": 0.1, 354 | "name": "Default", 355 | "pcb_color": "rgba(0, 0, 0, 0.000)", 356 | "schematic_color": "rgba(0, 0, 0, 0.000)", 357 | "track_width": 0.25, 358 | "via_diameter": 0.8, 359 | "via_drill": 0.4, 360 | "wire_width": 6.0 361 | } 362 | ], 363 | "meta": { 364 | "version": 2 365 | }, 366 | "net_colors": null 367 | }, 368 | "pcbnew": { 369 | "last_paths": { 370 | "gencad": "", 371 | "idf": "", 372 | "netlist": "", 373 | "specctra_dsn": "", 374 | "step": "", 375 | "vrml": "" 376 | }, 377 | "page_layout_descr_file": "" 378 | }, 379 | "schematic": { 380 | "annotate_start_num": 0, 381 | "drawing": { 382 | "default_line_thickness": 6.0, 383 | "default_text_size": 50.0, 384 | "field_names": [], 385 | "intersheets_ref_own_page": false, 386 | "intersheets_ref_prefix": "", 387 | "intersheets_ref_short": false, 388 | "intersheets_ref_show": false, 389 | "intersheets_ref_suffix": "", 390 | "junction_size_choice": 3, 391 | "label_size_ratio": 0.25, 392 | "pin_symbol_size": 0.0, 393 | "text_offset_ratio": 0.08 394 | }, 395 | "legacy_lib_dir": "", 396 | "legacy_lib_list": [], 397 | "meta": { 398 | "version": 1 399 | }, 400 | "net_format_name": "Pcbnew", 401 | "ngspice": { 402 | "fix_include_paths": true, 403 | "fix_passive_vals": false, 404 | "meta": { 405 | "version": 0 406 | }, 407 | "model_mode": 0, 408 | "workbook_filename": "" 409 | }, 410 | "page_layout_descr_file": "", 411 | "plot_directory": "", 412 | "spice_adjust_passive_values": false, 413 | "spice_external_command": "spice \"%I\"", 414 | "subpart_first_id": 65, 415 | "subpart_id_separator": 0 416 | }, 417 | "sheets": [ 418 | [ 419 | "9ea1e9d5-6e3b-4c51-b6b3-bbb72c144030", 420 | "" 421 | ] 422 | ], 423 | "text_variables": {} 424 | } 425 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Proto/Z80Proto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/Z80-NQC/Z80Proto/Z80Proto.png -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Proto/revisions/Z80Proto-rev0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/Z80-NQC/Z80Proto/revisions/Z80Proto-rev0.zip -------------------------------------------------------------------------------- /hardware/Z80-NQC/Z80Proto/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name "Computie_Memory")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/symbols/Computie_Memory.kicad_sym")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /hardware/Z80-NQC/images/Z80-NCQ-Board-Back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/Z80-NQC/images/Z80-NCQ-Board-Back.jpg -------------------------------------------------------------------------------- /hardware/Z80-NQC/images/Z80-NCQ-Board-Front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/Z80-NQC/images/Z80-NCQ-Board-Front.jpg -------------------------------------------------------------------------------- /hardware/Z80-NQC/images/Z80-NCQ-Built.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/Z80-NQC/images/Z80-NCQ-Built.jpg -------------------------------------------------------------------------------- /hardware/k30-SBC/Memory-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # 74xx_74HC14 5 | # 6 | DEF 74xx_74HC14 U 0 40 Y Y 7 L N 7 | F0 "U" 0 50 50 H V C CNN 8 | F1 "74xx_74HC14" 0 -50 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | ALIAS 74LS14 12 | $FPLIST 13 | DIP*W7.62mm* 14 | $ENDFPLIST 15 | DRAW 16 | S -200 300 200 -300 7 1 10 f 17 | P 4 1 0 10 -150 150 -150 -150 150 0 -150 150 f 18 | P 4 2 0 10 -150 150 -150 -150 150 0 -150 150 f 19 | P 4 3 0 10 -150 150 -150 -150 150 0 -150 150 f 20 | P 4 4 0 10 -150 150 -150 -150 150 0 -150 150 f 21 | P 4 5 0 10 -150 150 -150 -150 150 0 -150 150 f 22 | P 4 6 0 10 -150 150 -150 -150 150 0 -150 150 f 23 | P 3 1 1 0 -75 -50 -75 50 -25 50 N 24 | P 4 1 1 0 -100 -50 -25 -50 -25 50 0 50 N 25 | P 3 2 1 0 -75 -50 -75 50 -25 50 N 26 | P 4 2 1 0 -100 -50 -25 -50 -25 50 0 50 N 27 | P 3 3 1 0 -75 -50 -75 50 -25 50 N 28 | P 4 3 1 0 -100 -50 -25 -50 -25 50 0 50 N 29 | P 3 4 1 0 -75 -50 -75 50 -25 50 N 30 | P 4 4 1 0 -100 -50 -25 -50 -25 50 0 50 N 31 | P 3 5 1 0 -75 -50 -75 50 -25 50 N 32 | P 4 5 1 0 -100 -50 -25 -50 -25 50 0 50 N 33 | P 3 6 1 0 -75 -50 -75 50 -25 50 N 34 | P 4 6 1 0 -100 -50 -25 -50 -25 50 0 50 N 35 | X ~ 1 -300 0 150 R 50 50 1 0 I 36 | X ~ 2 300 0 150 L 50 50 1 0 O I 37 | X ~ 3 -300 0 150 R 50 50 2 0 I 38 | X ~ 4 300 0 150 L 50 50 2 0 O I 39 | X ~ 5 -300 0 150 R 50 50 3 0 I 40 | X ~ 6 300 0 150 L 50 50 3 0 O I 41 | X ~ 8 300 0 150 L 50 50 4 0 O I 42 | X ~ 9 -300 0 150 R 50 50 4 0 I 43 | X ~ 10 300 0 150 L 50 50 5 0 O I 44 | X ~ 11 -300 0 150 R 50 50 5 0 I 45 | X ~ 12 300 0 150 L 50 50 6 0 O I 46 | X ~ 13 -300 0 150 R 50 50 6 0 I 47 | X VCC 14 0 500 200 D 50 50 7 0 W 48 | X GND 7 0 -500 200 U 50 50 7 0 W 49 | ENDDRAW 50 | ENDDEF 51 | # 52 | # 74xx_74LS08 53 | # 54 | DEF 74xx_74LS08 U 0 40 Y Y 5 L N 55 | F0 "U" 0 50 50 H V C CNN 56 | F1 "74xx_74LS08" 0 -50 50 H V C CNN 57 | F2 "" 0 0 50 H I C CNN 58 | F3 "" 0 0 50 H I C CNN 59 | $FPLIST 60 | DIP*W7.62mm* 61 | $ENDFPLIST 62 | DRAW 63 | A 0 0 150 -899 899 1 1 10 f 0 -150 0 150 64 | A 0 0 150 -899 899 2 1 10 f 0 -150 0 150 65 | A 0 0 150 -899 899 3 1 10 f 0 -150 0 150 66 | A 0 0 150 -899 899 4 1 10 f 0 -150 0 150 67 | A -360 0 258 354 -354 1 2 10 N -150 150 -150 -150 68 | A -47 -52 204 150 837 1 2 10 f 150 0 -24 150 69 | A -47 52 204 -150 -837 1 2 10 f 150 0 -24 -150 70 | A -360 0 258 354 -354 2 2 10 N -150 150 -150 -150 71 | A -47 -52 204 150 837 2 2 10 f 150 0 -24 150 72 | A -47 52 204 -150 -837 2 2 10 f 150 0 -24 -150 73 | A -360 0 258 354 -354 3 2 10 N -150 150 -150 -150 74 | A -47 -52 204 150 837 3 2 10 f 150 0 -24 150 75 | A -47 52 204 -150 -837 3 2 10 f 150 0 -24 -150 76 | A -360 0 258 354 -354 4 2 10 N -150 150 -150 -150 77 | A -47 -52 204 150 837 4 2 10 f 150 0 -24 150 78 | A -47 52 204 -150 -837 4 2 10 f 150 0 -24 -150 79 | S -200 300 200 -300 5 1 10 f 80 | P 4 1 1 10 0 150 -150 150 -150 -150 0 -150 f 81 | P 4 2 1 10 0 150 -150 150 -150 -150 0 -150 f 82 | P 4 3 1 10 0 150 -150 150 -150 -150 0 -150 f 83 | P 4 4 1 10 0 150 -150 150 -150 -150 0 -150 f 84 | P 2 1 2 10 -150 -150 -25 -150 f 85 | P 2 1 2 10 -150 150 -25 150 f 86 | P 12 1 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 87 | P 2 2 2 10 -150 -150 -25 -150 f 88 | P 2 2 2 10 -150 150 -25 150 f 89 | P 12 2 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 90 | P 2 3 2 10 -150 -150 -25 -150 f 91 | P 2 3 2 10 -150 150 -25 150 f 92 | P 12 3 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 93 | P 2 4 2 10 -150 -150 -25 -150 f 94 | P 2 4 2 10 -150 150 -25 150 f 95 | P 12 4 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 96 | X VCC 14 0 500 200 D 50 50 5 0 W 97 | X GND 7 0 -500 200 U 50 50 5 0 W 98 | X ~ 1 -300 100 150 R 50 50 1 1 I 99 | X ~ 2 -300 -100 150 R 50 50 1 1 I 100 | X ~ 3 300 0 150 L 50 50 1 1 O 101 | X ~ 4 -300 100 150 R 50 50 2 1 I 102 | X ~ 5 -300 -100 150 R 50 50 2 1 I 103 | X ~ 6 300 0 150 L 50 50 2 1 O 104 | X ~ 10 -300 -100 150 R 50 50 3 1 I 105 | X ~ 8 300 0 150 L 50 50 3 1 O 106 | X ~ 9 -300 100 150 R 50 50 3 1 I 107 | X ~ 11 300 0 150 L 50 50 4 1 O 108 | X ~ 12 -300 100 150 R 50 50 4 1 I 109 | X ~ 13 -300 -100 150 R 50 50 4 1 I 110 | X ~ 1 -300 100 170 R 50 50 1 2 I I 111 | X ~ 2 -300 -100 170 R 50 50 1 2 I I 112 | X ~ 3 300 0 150 L 50 50 1 2 O I 113 | X ~ 4 -300 100 170 R 50 50 2 2 I I 114 | X ~ 5 -300 -100 170 R 50 50 2 2 I I 115 | X ~ 6 300 0 150 L 50 50 2 2 O I 116 | X ~ 10 -300 -100 170 R 50 50 3 2 I I 117 | X ~ 8 300 0 150 L 50 50 3 2 O I 118 | X ~ 9 -300 100 170 R 50 50 3 2 I I 119 | X ~ 11 300 0 150 L 50 50 4 2 O I 120 | X ~ 12 -300 100 170 R 50 50 4 2 I I 121 | X ~ 13 -300 -100 170 R 50 50 4 2 I I 122 | ENDDRAW 123 | ENDDEF 124 | # 125 | # 74xx_74LS139 126 | # 127 | DEF 74xx_74LS139 U 0 40 Y Y 3 L N 128 | F0 "U" -300 350 50 H V C CNN 129 | F1 "74xx_74LS139" -300 -350 50 H V C CNN 130 | F2 "" 0 0 50 H I C CNN 131 | F3 "" 0 0 50 H I C CNN 132 | $FPLIST 133 | DIP?16* 134 | $ENDFPLIST 135 | DRAW 136 | S -300 200 300 -300 1 1 10 f 137 | S -300 200 300 -300 2 1 10 f 138 | S -200 300 200 -300 3 1 10 f 139 | X E 1 -500 -200 200 R 50 50 1 0 I I 140 | X A0 2 -500 0 200 R 50 50 1 0 I 141 | X A1 3 -500 100 200 R 50 50 1 0 I 142 | X O0 4 500 100 200 L 50 50 1 0 O I 143 | X O1 5 500 0 200 L 50 50 1 0 O I 144 | X O2 6 500 -100 200 L 50 50 1 0 O I 145 | X O3 7 500 -200 200 L 50 50 1 0 O I 146 | X O2 10 500 -100 200 L 50 50 2 0 O I 147 | X O1 11 500 0 200 L 50 50 2 0 O I 148 | X O0 12 500 100 200 L 50 50 2 0 O I 149 | X A1 13 -500 100 200 R 50 50 2 0 I 150 | X A0 14 -500 0 200 R 50 50 2 0 I 151 | X E 15 -500 -200 200 R 50 50 2 0 I I 152 | X O3 9 500 -200 200 L 50 50 2 0 O I 153 | X VCC 16 0 500 200 D 50 50 3 0 W 154 | X GND 8 0 -500 200 U 50 50 3 0 W 155 | ENDDRAW 156 | ENDDEF 157 | # 158 | # 74xx_74LS253 159 | # 160 | DEF 74xx_74LS253 U 0 40 Y Y 1 L N 161 | F0 "U" -300 850 50 H V C CNN 162 | F1 "74xx_74LS253" -300 -950 50 H V C CNN 163 | F2 "" 0 0 50 H I C CNN 164 | F3 "" 0 0 50 H I C CNN 165 | $FPLIST 166 | DIP?16* 167 | $ENDFPLIST 168 | DRAW 169 | S -300 800 300 -900 1 1 10 f 170 | X OEa 1 -500 200 200 R 50 50 1 0 I I 171 | X I0b 10 -500 0 200 R 50 50 1 0 I 172 | X I1b 11 -500 -100 200 R 50 50 1 0 I 173 | X I2b 12 -500 -200 200 R 50 50 1 0 I 174 | X I3b 13 -500 -300 200 R 50 50 1 0 I 175 | X A0 14 -500 -700 200 R 50 50 1 0 I 176 | X OEb 15 -500 -500 200 R 50 50 1 0 I I 177 | X VCC 16 0 1000 200 D 50 50 1 0 W 178 | X A1 2 -500 -800 200 R 50 50 1 0 I 179 | X I3a 3 -500 400 200 R 50 50 1 0 I 180 | X I2a 4 -500 500 200 R 50 50 1 0 I 181 | X I1a 5 -500 600 200 R 50 50 1 0 I 182 | X I0a 6 -500 700 200 R 50 50 1 0 I 183 | X Za 7 500 700 200 L 50 50 1 0 T 184 | X GND 8 0 -1100 200 U 50 50 1 0 W 185 | X Zb 9 500 0 200 L 50 50 1 0 T 186 | ENDDRAW 187 | ENDDEF 188 | # 189 | # 74xx_74LS32 190 | # 191 | DEF 74xx_74LS32 U 0 40 Y Y 5 L N 192 | F0 "U" 0 50 50 H V C CNN 193 | F1 "74xx_74LS32" 0 -50 50 H V C CNN 194 | F2 "" 0 0 50 H I C CNN 195 | F3 "" 0 0 50 H I C CNN 196 | $FPLIST 197 | DIP?14* 198 | $ENDFPLIST 199 | DRAW 200 | A -360 0 258 354 -354 1 1 10 N -150 150 -150 -150 201 | A -47 -52 204 150 837 1 1 10 f 150 0 -24 150 202 | A -47 52 204 -150 -837 1 1 10 f 150 0 -24 -150 203 | A -360 0 258 354 -354 2 1 10 N -150 150 -150 -150 204 | A -47 -52 204 150 837 2 1 10 f 150 0 -24 150 205 | A -47 52 204 -150 -837 2 1 10 f 150 0 -24 -150 206 | A -360 0 258 354 -354 3 1 10 N -150 150 -150 -150 207 | A -47 -52 204 150 837 3 1 10 f 150 0 -24 150 208 | A -47 52 204 -150 -837 3 1 10 f 150 0 -24 -150 209 | A -360 0 258 354 -354 4 1 10 N -150 150 -150 -150 210 | A -47 -52 204 150 837 4 1 10 f 150 0 -24 150 211 | A -47 52 204 -150 -837 4 1 10 f 150 0 -24 -150 212 | A 0 0 150 -899 899 1 2 10 f 0 -150 0 150 213 | A 0 0 150 -899 899 2 2 10 f 0 -150 0 150 214 | A 0 0 150 -899 899 3 2 10 f 0 -150 0 150 215 | A 0 0 150 -899 899 4 2 10 f 0 -150 0 150 216 | S -200 300 200 -300 5 1 10 f 217 | P 2 1 1 10 -150 -150 -25 -150 f 218 | P 2 1 1 10 -150 150 -25 150 f 219 | P 12 1 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 220 | P 2 2 1 10 -150 -150 -25 -150 f 221 | P 2 2 1 10 -150 150 -25 150 f 222 | P 12 2 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 223 | P 2 3 1 10 -150 -150 -25 -150 f 224 | P 2 3 1 10 -150 150 -25 150 f 225 | P 12 3 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 226 | P 2 4 1 10 -150 -150 -25 -150 f 227 | P 2 4 1 10 -150 150 -25 150 f 228 | P 12 4 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f 229 | P 4 1 2 10 0 150 -150 150 -150 -150 0 -150 f 230 | P 4 2 2 10 0 150 -150 150 -150 -150 0 -150 f 231 | P 4 3 2 10 0 150 -150 150 -150 -150 0 -150 f 232 | P 4 4 2 10 0 150 -150 150 -150 -150 0 -150 f 233 | X VCC 14 0 500 200 D 50 50 5 0 W 234 | X GND 7 0 -500 200 U 50 50 5 0 W 235 | X ~ 1 -300 100 170 R 50 50 1 1 I 236 | X ~ 2 -300 -100 170 R 50 50 1 1 I 237 | X ~ 3 300 0 150 L 50 50 1 1 O 238 | X ~ 4 -300 100 170 R 50 50 2 1 I 239 | X ~ 5 -300 -100 170 R 50 50 2 1 I 240 | X ~ 6 300 0 150 L 50 50 2 1 O 241 | X ~ 10 -300 -100 170 R 50 50 3 1 I 242 | X ~ 8 300 0 150 L 50 50 3 1 O 243 | X ~ 9 -300 100 170 R 50 50 3 1 I 244 | X ~ 11 300 0 150 L 50 50 4 1 O 245 | X ~ 12 -300 100 170 R 50 50 4 1 I 246 | X ~ 13 -300 -100 170 R 50 50 4 1 I 247 | X ~ 1 -300 100 150 R 50 50 1 2 I I 248 | X ~ 2 -300 -100 150 R 50 50 1 2 I I 249 | X ~ 3 300 0 150 L 50 50 1 2 O I 250 | X ~ 4 -300 100 150 R 50 50 2 2 I I 251 | X ~ 5 -300 -100 150 R 50 50 2 2 I I 252 | X ~ 6 300 0 150 L 50 50 2 2 O I 253 | X ~ 10 -300 -100 150 R 50 50 3 2 I I 254 | X ~ 8 300 0 150 L 50 50 3 2 O I 255 | X ~ 9 -300 100 150 R 50 50 3 2 I I 256 | X ~ 11 300 0 150 L 50 50 4 2 O I 257 | X ~ 12 -300 100 150 R 50 50 4 2 I I 258 | X ~ 13 -300 -100 150 R 50 50 4 2 I I 259 | ENDDRAW 260 | ENDDEF 261 | # 262 | # 74xx_74LS393 263 | # 264 | DEF 74xx_74LS393 U 0 40 Y Y 3 L N 265 | F0 "U" -300 350 50 H V C CNN 266 | F1 "74xx_74LS393" -300 -350 50 H V C CNN 267 | F2 "" 0 0 50 H I C CNN 268 | F3 "" 0 0 50 H I C CNN 269 | $FPLIST 270 | DIP*W7.62mm* 271 | $ENDFPLIST 272 | DRAW 273 | S -300 200 300 -300 1 1 10 f 274 | S -300 200 300 -300 2 1 10 f 275 | S -200 300 200 -300 3 1 10 f 276 | X CP 1 -500 100 200 R 50 50 1 0 I C 277 | X MR 2 -500 -200 200 R 50 50 1 0 I 278 | X Q0 3 500 100 200 L 50 50 1 0 O 279 | X Q1 4 500 0 200 L 50 50 1 0 O 280 | X Q2 5 500 -100 200 L 50 50 1 0 O 281 | X Q3 6 500 -200 200 L 50 50 1 0 O 282 | X Q1 10 500 0 200 L 50 50 2 0 O 283 | X Q0 11 500 100 200 L 50 50 2 0 O 284 | X MR 12 -500 -200 200 R 50 50 2 0 I 285 | X CP 13 -500 100 200 R 50 50 2 0 I C 286 | X Q3 8 500 -200 200 L 50 50 2 0 O 287 | X Q2 9 500 -100 200 L 50 50 2 0 O 288 | X VCC 14 0 500 200 D 50 50 3 0 W 289 | X GND 7 0 -500 200 U 50 50 3 0 W 290 | ENDDRAW 291 | ENDDEF 292 | # 293 | # Jumper_Jumper_3_Bridged12 294 | # 295 | DEF Jumper_Jumper_3_Bridged12 JP 0 0 Y N 1 F N 296 | F0 "JP" -100 -100 50 H V C CNN 297 | F1 "Jumper_Jumper_3_Bridged12" 0 110 50 H V C CNN 298 | F2 "" 0 0 50 H I C CNN 299 | F3 "" 0 0 50 H I C CNN 300 | $FPLIST 301 | Jumper* 302 | TestPoint*3Pads* 303 | TestPoint*Bridge* 304 | $ENDFPLIST 305 | DRAW 306 | A -65 -50 89 1282 518 0 1 0 N -120 20 -10 20 307 | C -130 0 20 0 0 0 N 308 | C 0 0 20 0 0 0 N 309 | C 130 0 20 0 0 0 N 310 | P 2 0 1 0 0 -50 0 -20 N 311 | X A 1 -250 0 100 R 50 50 1 1 P 312 | X C 2 0 -150 100 U 50 50 1 1 I 313 | X B 3 250 0 100 L 50 50 1 1 P 314 | ENDDRAW 315 | ENDDEF 316 | # 317 | # power_+5V 318 | # 319 | DEF power_+5V #PWR 0 0 Y Y 1 F P 320 | F0 "#PWR" 0 -150 50 H I C CNN 321 | F1 "power_+5V" 0 140 50 H V C CNN 322 | F2 "" 0 0 50 H I C CNN 323 | F3 "" 0 0 50 H I C CNN 324 | DRAW 325 | P 2 0 1 0 -30 50 0 100 N 326 | P 2 0 1 0 0 0 0 100 N 327 | P 2 0 1 0 0 100 30 50 N 328 | X +5V 1 0 0 0 U 50 50 1 1 W N 329 | ENDDRAW 330 | ENDDEF 331 | # 332 | # power_GND 333 | # 334 | DEF power_GND #PWR 0 0 Y Y 1 F P 335 | F0 "#PWR" 0 -250 50 H I C CNN 336 | F1 "power_GND" 0 -150 50 H V C CNN 337 | F2 "" 0 0 50 H I C CNN 338 | F3 "" 0 0 50 H I C CNN 339 | DRAW 340 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 341 | X GND 1 0 0 0 D 50 50 1 1 W N 342 | ENDDRAW 343 | ENDDEF 344 | # 345 | #End Library 346 | -------------------------------------------------------------------------------- /hardware/k30-SBC/README.md: -------------------------------------------------------------------------------- 1 | 2 | k30-SBC 3 | ======= 4 | 5 | Status: Built & Tested 6 | 7 | Latest: Rev.2 8 | 9 | ### About 10 | A single board computer with DIP packaged chips. The only programmable chip is the flash memory, which can 11 | be written in-circuit using the Ardunio-based supervisor shield. 12 | 13 | [Revision 2 Notes & Errata](revisions/k30-SBC-rev2-errata.txt) 14 | 15 | [Revision 2 Schematic](revisions/k30-SBC-rev2.pdf) 16 | 17 | [Revision 2 Gerbers](revisions/k30-SBC-rev2.zip) 18 | 19 | 20 | ![alt text](../../images/k30-SBC-rev2/board-top.jpg "k30-SBC board, which is 160mm x 100mm with a purple coloured solder mask and white pin headers, fully populated with all components, and with a CompactFlash card in the slot on the bottom left with a white and blue label that reads WD SiliconDrive II 8 GB PATA") 21 | ![alt text](../../images/k30-SBC-rev2/pcb-top.jpg "k30-SBC board unpopulated, showing the purple solder mask and white silk screen labels") 22 | -------------------------------------------------------------------------------- /hardware/k30-SBC/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name "Computie_Connectors")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/footprints/Computie_Connectors.pretty")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /hardware/k30-SBC/k30-SBC.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 2, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "ratsnest_display_mode": 0, 18 | "selection_filter": { 19 | "dimensions": true, 20 | "footprints": true, 21 | "graphics": true, 22 | "keepouts": true, 23 | "lockedItems": true, 24 | "otherItems": true, 25 | "pads": true, 26 | "text": true, 27 | "tracks": true, 28 | "vias": true, 29 | "zones": true 30 | }, 31 | "visible_items": [ 32 | 0, 33 | 1, 34 | 2, 35 | 3, 36 | 4, 37 | 5, 38 | 8, 39 | 9, 40 | 10, 41 | 11, 42 | 12, 43 | 13, 44 | 14, 45 | 15, 46 | 16, 47 | 17, 48 | 18, 49 | 19, 50 | 20, 51 | 21, 52 | 22, 53 | 23, 54 | 24, 55 | 25, 56 | 26, 57 | 27, 58 | 28, 59 | 29, 60 | 30, 61 | 32, 62 | 33, 63 | 34, 64 | 35, 65 | 36 66 | ], 67 | "visible_layers": "fffffff_ffffffff", 68 | "zone_display_mode": 1 69 | }, 70 | "meta": { 71 | "filename": "k30-SBC.kicad_prl", 72 | "version": 3 73 | }, 74 | "project": { 75 | "files": [] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /hardware/k30-SBC/k30-SBC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/k30-SBC/k30-SBC.pdf -------------------------------------------------------------------------------- /hardware/k30-SBC/revisions/k30-SBC-rev1-errata.txt: -------------------------------------------------------------------------------- 1 | 2 | Revision 1 Errata and Notes 3 | =========================== 4 | 5 | - the footprint for the 74HC253s is too small. I used the 16SSOP - 4.9mm wide, but the chips are 6 | actually 6.2mm wide. I've tried to bend the pins under to solder them instead 7 | 8 | - the HALT light should really be labelled RUN, since it's really ~HALT (ie. running) 9 | 10 | - the ATA DSACK output needs to be inverted. The input into the NAND gate should be active-low, 11 | but the output from the counter is going straight into the NAND input. I'm going to try 12 | patching it 13 | 14 | - (I think) the reset pin of the CompactFlash socket should be connected to the reset button, to 15 | ensure the card is reset. Soft resetting seems unreliable 16 | 17 | - there was an issues with the 74HC08 chip's AND gate that combines the address decode lines to 18 | produce the RAMSEL signal, and the fact that those two traces go underneath the chip is causing 19 | a lot of problems for debugging. Never route traces to pins underneath a surface mount chip! 20 | It turned out the traces were broken just before they entered the pads from underneath the chip. 21 | I was not able to patch it and instead bypassed the AND gate with a bodge wire from the trace 22 | from HC138 pin 14 (SEL1) to RAMSEL, which means only 1MB of RAM is accessible 23 | 24 | - the extra DTACK input into the NAND gate should be pulled high to disable it, or else it could 25 | trigger DTACK erroneously 26 | 27 | -------------------------------------------------------------------------------- /hardware/k30-SBC/revisions/k30-SBC-rev1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/k30-SBC/revisions/k30-SBC-rev1.pdf -------------------------------------------------------------------------------- /hardware/k30-SBC/revisions/k30-SBC-rev1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/k30-SBC/revisions/k30-SBC-rev1.zip -------------------------------------------------------------------------------- /hardware/k30-SBC/revisions/k30-SBC-rev2-errata.txt: -------------------------------------------------------------------------------- 1 | 2 | Revision 2 Errata and Notes 3 | =========================== 4 | 5 | - I forgot to add the part name silkscreen for the 74LVC1G32 that was added to rev. 2 6 | 7 | - 2023-07: This applies to most versions of Computie: If a ribbon cable is attached to the control 8 | signals header, it will cause the CPU to not work correctly due to issues with DSACK0/1. A 9 | larger pull up resistor on those signals should fix the problem (1K was tested) 10 | 11 | -------------------------------------------------------------------------------- /hardware/k30-SBC/revisions/k30-SBC-rev2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/k30-SBC/revisions/k30-SBC-rev2.pdf -------------------------------------------------------------------------------- /hardware/k30-SBC/revisions/k30-SBC-rev2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/hardware/k30-SBC/revisions/k30-SBC-rev2.zip -------------------------------------------------------------------------------- /hardware/k30-SBC/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name "Computie_68k")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/computie-kicad-library/symbols/Computie_68k.kicad_sym")(options "")(descr "")) 3 | (lib (name "Computie_Memory")(type "KiCad")(uri "/media/work/computie/hardware/kicad-libraries/computie-kicad-library/symbols/Computie_Memory.kicad_sym")(options "")(descr "")) 4 | ) 5 | -------------------------------------------------------------------------------- /images/68k-SBC-rev0/ArduinoShield-back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/ArduinoShield-back.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev0/ArduinoShield-front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/ArduinoShield-front.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev0/PCB-back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/PCB-back.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev0/PCB-front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/PCB-front.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev0/PCB-patch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/PCB-patch.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev0/SBC-nochips.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/SBC-nochips.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev0/SBC-wide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/SBC-wide.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev0/SBC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev0/SBC.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev2/ArduinoShield.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev2/ArduinoShield.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev2/PCBs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev2/PCBs.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev2/SBC-full.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev2/SBC-full.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev2/SBC-running.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev2/SBC-running.jpg -------------------------------------------------------------------------------- /images/68k-SBC-rev2/SBC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SBC-rev2/SBC.jpg -------------------------------------------------------------------------------- /images/68k-SMT-rev1/PCB-bottom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SMT-rev1/PCB-bottom.jpg -------------------------------------------------------------------------------- /images/68k-SMT-rev1/PCB-top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SMT-rev1/PCB-top.jpg -------------------------------------------------------------------------------- /images/68k-SMT-rev1/SMT-back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SMT-rev1/SMT-back.jpg -------------------------------------------------------------------------------- /images/68k-SMT-rev1/SMT-running.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SMT-rev1/SMT-running.jpg -------------------------------------------------------------------------------- /images/68k-SMT-rev1/SMT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/68k-SMT-rev1/SMT.jpg -------------------------------------------------------------------------------- /images/Breadboard-cpu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/Breadboard-cpu.jpg -------------------------------------------------------------------------------- /images/Breadboard-serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/Breadboard-serial.jpg -------------------------------------------------------------------------------- /images/OS-basic.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/OS-basic.gif -------------------------------------------------------------------------------- /images/OS-booting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/OS-booting.gif -------------------------------------------------------------------------------- /images/k30-SBC-rev1/k30-PCBs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev1/k30-PCBs.jpg -------------------------------------------------------------------------------- /images/k30-SBC-rev1/k30-SBC-running.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev1/k30-SBC-running.jpg -------------------------------------------------------------------------------- /images/k30-SBC-rev1/k30-SBC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev1/k30-SBC.jpg -------------------------------------------------------------------------------- /images/k30-SBC-rev1/k30-sbc-a4-long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev1/k30-sbc-a4-long.png -------------------------------------------------------------------------------- /images/k30-SBC-rev1/k30-sbc-a4-short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev1/k30-sbc-a4-short.png -------------------------------------------------------------------------------- /images/k30-SBC-rev1/k30-sbc-a9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev1/k30-sbc-a9.png -------------------------------------------------------------------------------- /images/k30-SBC-rev2/board-top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev2/board-top.jpg -------------------------------------------------------------------------------- /images/k30-SBC-rev2/pcb-bottom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev2/pcb-bottom.jpg -------------------------------------------------------------------------------- /images/k30-SBC-rev2/pcb-top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/transistorfet/computie/760e1b8046cc8e6e2dc9e471a0c6300c68ef26fe/images/k30-SBC-rev2/pcb-top.jpg -------------------------------------------------------------------------------- /notes.txt: -------------------------------------------------------------------------------- 1 | 2 | Compiling: 3 | 4 | make clean && make all && make commands 5 | 6 | 7 | Open a terminal: 8 | 9 | pyserial-miniterm /dev/ttyUSB0 38400 10 | 11 | 12 | Load the kernel across serial: 13 | 14 | python3 tools/load.py kernel.load 15 | 16 | 17 | Send a command: 18 | 19 | python3 tools/load.py -l src/commands/daemontest.send 20 | (the -l optionally limits the speed, but flow control works, so it shouldn't be necessary anymore) 21 | 22 | 23 | Enable SLIP on linux: 24 | 25 | sudo slattach -s 38400 -p slip /dev/ttyUSB1 26 | sudo ifconfig sl0 192.168.1.2 pointopoint 192.168.1.200 up 27 | // (this is automatically added on my machine) >> sudo route add -host 192.168.1.200 sl0 28 | sudo arp -Ds 192.168.1.200 enp3s0 pub 29 | sudo iptables -A FORWARD -i sl0 -j ACCEPT 30 | sudo iptables -A FORWARD -o sl0 -j ACCEPT 31 | sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" 32 | 33 | 34 | 35 | From the Monitor: 36 | 37 | To Boot from flash/ata0: 38 | boot 20000 39 | 40 | -------------------------------------------------------------------------------- /software/arduino/FlashTest/FlashTest.ino: -------------------------------------------------------------------------------- 1 | 2 | #define SERIAL_SPEED 115200 3 | 4 | #define MEM_TEST_HADDR 0x00 5 | 6 | #define MEM_TEST_START 0x00000 7 | #define MEM_TEST_SIZE 32700 8 | 9 | #define MEM_XADDR_PORT PORTF 10 | #define MEM_XADDR_PIN PINF 11 | #define MEM_XADDR_DDR DDRF 12 | 13 | #define MEM_HADDR_PORT PORTC 14 | #define MEM_HADDR_PIN PINC 15 | #define MEM_HADDR_DDR DDRC 16 | 17 | #define MEM_LADDR_PORT PORTL 18 | #define MEM_LADDR_PIN PINL 19 | #define MEM_LADDR_DDR DDRL 20 | 21 | #define MEM_LDATA_PORT PORTA 22 | #define MEM_LDATA_PIN PINA 23 | #define MEM_LDATA_DDR DDRA 24 | 25 | //#define MEM_HDATA_PORT PORTK 26 | //#define MEM_HDATA_PIN PINK 27 | //#define MEM_HDATA_DDR DDRK 28 | 29 | #define MEM_CE 50 // PB3 30 | #define MEM_OE 51 // PB2 31 | #define MEM_WE 53 // PB0 32 | 33 | byte bus_request = 0; 34 | 35 | 36 | 37 | #undef INLINE_NOP 38 | #define INLINE_NOP __asm__("nop\n\t"); 39 | 40 | #define BUS_DEVICE 0 41 | #define BUS_CONTROLLER 1 42 | 43 | byte bus_mode = BUS_DEVICE; 44 | 45 | #define TTY_COMMAND 0 46 | #define TTY_PASS 1 47 | 48 | byte tty_mode = TTY_COMMAND; 49 | 50 | void pciSetup(byte pin) 51 | { 52 | *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin)); // enable pin 53 | PCIFR |= bit (digitalPinToPCICRbit(pin)); // clear any outstanding interrupt 54 | PCICR |= bit (digitalPinToPCICRbit(pin)); // enable interrupt for the group 55 | } 56 | 57 | void pciDisable(byte pin) 58 | { 59 | PCICR &= ~(bit (digitalPinToPCICRbit(pin))); // disable interrupt for the group 60 | } 61 | 62 | void set_bus_mode_controller() 63 | { 64 | pciDisable(MEM_CE); 65 | 66 | // Controls 67 | pinMode(MEM_CE, OUTPUT); 68 | pinMode(MEM_OE, OUTPUT); 69 | pinMode(MEM_WE, OUTPUT); 70 | digitalWrite(MEM_CE, 1); 71 | digitalWrite(MEM_OE, 1); 72 | digitalWrite(MEM_WE, 1); 73 | 74 | // Address Bus 75 | MEM_XADDR_PORT = 0x00; // A16-A18 (for bit banged) 76 | MEM_XADDR_DDR = 0xFF; 77 | MEM_HADDR_PORT = 0x00; // A8 - A15 (for bit banged) 78 | MEM_HADDR_DDR = 0xFF; 79 | MEM_LADDR_PORT = 0x00; // A0 - A7 (for bit banged) 80 | MEM_LADDR_DDR = 0xFF; 81 | 82 | // Data Bus 83 | MEM_LDATA_PORT = 0x00; // D0 - D7 84 | MEM_LDATA_DDR = 0x00; 85 | 86 | tty_mode = TTY_COMMAND; 87 | bus_mode = BUS_CONTROLLER; 88 | } 89 | 90 | void set_bus_mode_device() 91 | { 92 | // Controls 93 | pinMode(MEM_CE, INPUT); 94 | pinMode(MEM_OE, INPUT); 95 | pinMode(MEM_WE, INPUT); 96 | 97 | // Address Bus 98 | MEM_XADDR_PORT = 0x00; // A16 - A18 (for bit banged) 99 | MEM_XADDR_DDR = 0x00; 100 | MEM_HADDR_PORT = 0x00; // A8 - A15 (for bit banged) 101 | MEM_HADDR_DDR = 0x00; 102 | MEM_LADDR_PORT = 0x00; // A0 - A7 (for bit banged) 103 | MEM_LADDR_DDR = 0x00; 104 | 105 | // Data Bus 106 | MEM_LDATA_PORT = 0x00; // D0 - D7 107 | MEM_LDATA_DDR = 0x00; 108 | 109 | pciSetup(MEM_CE); 110 | bus_mode = BUS_DEVICE; 111 | } 112 | 113 | /****************************** 114 | * Serial Communications Code * 115 | ******************************/ 116 | 117 | #define SERIAL_SIZE 64 118 | 119 | char serial_read_tail = 0; 120 | char serial_read_head = 0; 121 | char serial_avail = 0; 122 | char serial_rb[SERIAL_SIZE]; 123 | char serial_write_head = 0; 124 | char serial_write_tail = 0; 125 | char serial_wb[SERIAL_SIZE]; 126 | 127 | byte read_serial() 128 | { 129 | register char b; 130 | 131 | b = Serial.read(); 132 | if (b == -1) 133 | return 0; 134 | 135 | if (tty_mode == TTY_PASS) { 136 | if (b == '`') { 137 | set_bus_mode_controller(); 138 | clear_read_buffer(); 139 | return 0; 140 | } 141 | 142 | noInterrupts(); 143 | //if (serial_read_head == serial_read_tail) { 144 | // serial_read_head = 0; 145 | // serial_read_tail = 0; 146 | //} 147 | 148 | serial_rb[serial_read_tail++] = b; 149 | if (serial_read_tail >= SERIAL_SIZE) 150 | serial_read_tail = 0; 151 | interrupts(); 152 | //Serial.write(serial_get_byte()); 153 | return 0; 154 | } 155 | else if (tty_mode == TTY_COMMAND) { 156 | noInterrupts(); 157 | serial_rb[serial_read_tail] = b; 158 | if (b == '\n' || b == '\r') { 159 | serial_rb[serial_read_tail] = '\0'; 160 | serial_avail = 1; 161 | } 162 | if (serial_read_tail < SERIAL_SIZE) 163 | serial_read_tail++; 164 | interrupts(); 165 | return serial_avail; 166 | } 167 | } 168 | 169 | inline byte serial_get_byte() 170 | { 171 | register byte value; 172 | 173 | noInterrupts(); 174 | if (serial_read_head == serial_read_tail) { 175 | //clear_read_buffer(); 176 | value = -1; 177 | } else { 178 | value = serial_rb[serial_read_head++]; 179 | if (serial_read_head >= SERIAL_SIZE) 180 | serial_read_head = 0; 181 | } 182 | interrupts(); 183 | return value; 184 | } 185 | 186 | inline byte serial_add_byte(byte data) 187 | { 188 | noInterrupts(); 189 | serial_wb[serial_write_tail++] = data; 190 | interrupts(); 191 | } 192 | 193 | void clear_read_buffer() 194 | { 195 | noInterrupts(); 196 | serial_avail = 0; 197 | serial_read_head = 0; 198 | serial_read_tail = 0; 199 | interrupts(); 200 | } 201 | 202 | void flush_write_buffer() 203 | { 204 | if (serial_write_tail > 0) { 205 | //take_bus(); 206 | noInterrupts(); 207 | for (byte i = 0; i < serial_write_tail; i++) { 208 | Serial.write(serial_wb[i]); 209 | } 210 | serial_write_head = 0; 211 | serial_write_tail = 0; 212 | interrupts(); 213 | //if (is_running) 214 | // release_bus(); 215 | } 216 | } 217 | 218 | 219 | 220 | word send_size = 768; 221 | byte send_mem[] = { 222 | 223 | }; 224 | 225 | #define ROM_SIZE 0x1200 226 | #define MEM_SIZE 0x1800 227 | word mem_size = MEM_SIZE; 228 | byte mem[MEM_SIZE] = { 229 | #include "/media/work/computie/software/output.txt" 230 | }; 231 | 232 | 233 | inline void write_data(long addr, byte data) 234 | { 235 | MEM_LDATA_DDR = 0xFF; 236 | MEM_LDATA_PORT = data; 237 | MEM_XADDR_PORT = (addr >> 16); 238 | MEM_HADDR_PORT = (addr >> 8) & 0xFF; 239 | MEM_LADDR_PORT = (0x00FF & addr); 240 | digitalWrite(MEM_WE, 0); 241 | digitalWrite(MEM_OE, 1); 242 | digitalWrite(MEM_CE, 0); 243 | delayMicroseconds(1); 244 | digitalWrite(MEM_WE, 1); 245 | digitalWrite(MEM_OE, 1); 246 | digitalWrite(MEM_CE, 1); 247 | INLINE_NOP; 248 | INLINE_NOP; 249 | } 250 | 251 | inline byte read_data(long addr) 252 | { 253 | byte value = 0; 254 | 255 | MEM_LDATA_DDR = 0x00; 256 | MEM_XADDR_PORT = (addr >> 16); 257 | MEM_HADDR_PORT = (addr >> 8) & 0xFF; 258 | MEM_LADDR_PORT = 0x00FF & addr; 259 | digitalWrite(MEM_WE, 1); 260 | digitalWrite(MEM_OE, 0); 261 | digitalWrite(MEM_CE, 0); 262 | delayMicroseconds(1); 263 | value = MEM_LDATA_PIN; 264 | digitalWrite(MEM_WE, 1); 265 | digitalWrite(MEM_OE, 1); 266 | digitalWrite(MEM_CE, 1); 267 | INLINE_NOP; 268 | INLINE_NOP; 269 | 270 | return value; 271 | } 272 | 273 | void run_read_test() 274 | { 275 | int lvalue = 0; 276 | int errors = 0; 277 | 278 | set_bus_mode_controller(); 279 | Serial.print("Running Read Test\n"); 280 | 281 | MEM_LDATA_PORT = 0x00; 282 | MEM_LDATA_DDR = 0x00; 283 | 284 | MEM_XADDR_PORT = 0; 285 | MEM_HADDR_PORT = 0; 286 | MEM_LADDR_PORT = 0; 287 | digitalWrite(MEM_WE, 1); 288 | for (long i = 0; i < MEM_TEST_SIZE; i++) { 289 | lvalue = read_data(i + MEM_TEST_START); 290 | 291 | if (lvalue != (i & 0x00FF)) 292 | errors += 1; 293 | if (lvalue < 10) Serial.print("0"); 294 | Serial.print(lvalue, HEX); 295 | Serial.print(" "); 296 | if (i % 64 == 63) 297 | Serial.print("\n"); 298 | } 299 | 300 | Serial.print("\n"); 301 | Serial.print("Errors: "); 302 | Serial.print(errors, DEC); 303 | Serial.print("\n"); 304 | } 305 | 306 | void run_write_test() 307 | { 308 | set_bus_mode_controller(); 309 | Serial.print("Running Write Test\n"); 310 | 311 | digitalWrite(MEM_WE, 1); 312 | digitalWrite(MEM_CE, 1); 313 | 314 | MEM_LDATA_PORT = 0x00; 315 | MEM_LDATA_DDR = 0xFF; 316 | 317 | MEM_HADDR_PORT = 0xFF; 318 | MEM_LADDR_PORT = 0; 319 | for (long i = 0; i < MEM_TEST_SIZE; i++) { 320 | MEM_LDATA_PORT = (i & 0x00FF); 321 | MEM_XADDR_PORT = (i >> 16) + MEM_TEST_HADDR; 322 | MEM_HADDR_PORT = (i >> 8) + MEM_TEST_HADDR; 323 | MEM_LADDR_PORT = 0x00FF & i; 324 | digitalWrite(MEM_WE, 0); 325 | digitalWrite(MEM_CE, 0); 326 | delayMicroseconds(1); 327 | digitalWrite(MEM_WE, 1); 328 | digitalWrite(MEM_CE, 1); 329 | MEM_HADDR_PORT = 0xFF; 330 | MEM_LADDR_PORT = 0; 331 | delayMicroseconds(1); 332 | if ((i % 64) == 63) { 333 | delayMicroseconds(10000); 334 | } 335 | } 336 | 337 | Serial.print("Complete\n"); 338 | } 339 | 340 | void run_send_mem() 341 | { 342 | word addr = (MEM_TEST_HADDR << 8); 343 | 344 | set_bus_mode_controller(); 345 | 346 | MEM_LDATA_PORT = 0x00; 347 | MEM_LDATA_DDR = 0xFF; 348 | delayMicroseconds(1); 349 | for (word i = 0; i < mem_size; i += 2, addr += 1) { 350 | MEM_LDATA_PORT = mem[i + 1]; 351 | MEM_HADDR_PORT = addr >> 8; 352 | MEM_LADDR_PORT = addr & 0xFF; 353 | digitalWrite(MEM_WE, 0); 354 | digitalWrite(MEM_CE, 0); 355 | delayMicroseconds(1); 356 | digitalWrite(MEM_WE, 1); 357 | digitalWrite(MEM_CE, 1); 358 | MEM_HADDR_PORT = 0xFF; 359 | MEM_LADDR_PORT = 0; 360 | delayMicroseconds(1); 361 | if ((addr % 64) == 63) { 362 | delayMicroseconds(10000); 363 | } 364 | } 365 | 366 | Serial.print("Sending complete\n"); 367 | } 368 | 369 | void run_flash_erase() 370 | { 371 | write_data(0x555, 0xAA); 372 | write_data(0x2AA, 0x55); 373 | write_data(0x555, 0x80); 374 | write_data(0x555, 0xAA); 375 | write_data(0x2AA, 0x55); 376 | write_data(0x00, 0x30); 377 | Serial.println("Supposedly erasing"); 378 | } 379 | 380 | 381 | void run_flash_test() 382 | { 383 | byte value; 384 | 385 | write_data(0x5555, 0xAA); 386 | write_data(0x2AAA, 0x55); 387 | write_data(0x5555, 0x90); 388 | value = read_data(0x00); 389 | Serial.print("MFR ID: "); 390 | Serial.print(value, HEX); 391 | Serial.print("\n"); 392 | 393 | write_data(0x5555, 0xAA); 394 | write_data(0x2AAA, 0x55); 395 | write_data(0x5555, 0x90); 396 | value = read_data(0x01); 397 | Serial.print("DEV ID: "); 398 | Serial.print(value, HEX); 399 | Serial.print("\n"); 400 | 401 | write_data(0x5555, 0xAA); 402 | write_data(0x2AAA, 0x55); 403 | write_data(0x5555, 0x90); 404 | value = read_data(0x03); 405 | Serial.print("CON ID: "); 406 | Serial.print(value, HEX); 407 | Serial.print("\n"); 408 | } 409 | 410 | void run_flash_reset() 411 | { 412 | write_data(0x0000, 0xF0); 413 | Serial.println("Supposedly reset"); 414 | } 415 | 416 | 417 | void program_data(long addr, byte data) 418 | { 419 | write_data(0x555, 0xAA); 420 | write_data(0x2AA, 0x55); 421 | write_data(0x555, 0xA0); 422 | write_data(addr, data); 423 | } 424 | 425 | void run_flash_program() 426 | { 427 | char *str = "Hello\n"; 428 | for (byte i = 0; i < 6; i++) { 429 | program_data(i, str[i]); 430 | } 431 | Serial.println("Programmed string"); 432 | } 433 | 434 | void do_command(String line) 435 | { 436 | if (line.equals("read")) { 437 | run_read_test(); 438 | } 439 | else if (line.equals("write")) { 440 | run_write_test(); 441 | } 442 | else if (line.equals("send")) { 443 | run_send_mem(); 444 | } 445 | else if (line.equals("test")) { 446 | run_flash_test(); 447 | } 448 | else if (line.equals("reset")) { 449 | run_flash_reset(); 450 | } 451 | else if (line.equals("erase")) { 452 | run_flash_erase(); 453 | } 454 | else if (line.equals("program")) { 455 | run_flash_program(); 456 | } 457 | } 458 | 459 | void setup() 460 | { 461 | Serial.begin(SERIAL_SPEED); 462 | 463 | set_bus_mode_controller(); 464 | //set_bus_mode_device(); 465 | 466 | pinMode(13, OUTPUT); 467 | digitalWrite(13, 0); 468 | 469 | Serial.print("> "); 470 | } 471 | 472 | void loop() 473 | { 474 | if (read_serial() && tty_mode == TTY_COMMAND) { 475 | String line = String(serial_rb); 476 | clear_read_buffer(); 477 | Serial.print(line); 478 | Serial.print("\n"); 479 | do_command(line); 480 | if (tty_mode == TTY_COMMAND) 481 | Serial.print("\n> "); 482 | } 483 | } 484 | 485 | -------------------------------------------------------------------------------- /software/arduino/MemTest/MemTest.ino: -------------------------------------------------------------------------------- 1 | 2 | #define SERIAL_SPEED 115200 3 | 4 | #define MEM_WR 41 // PG0 5 | #define MEM_RD 40 // PG1 6 | #define MEM_CS 39 // PG2 7 | 8 | 9 | void init_bus() 10 | { 11 | // Address Bus 12 | PORTL = 0x00; // A8 - A15 (for bit banged) 13 | DDRL = 0xFF; 14 | PORTC = 0x00; // A0 - A7 (for bit banged) 15 | DDRC = 0xFF; 16 | 17 | // Data Bus 18 | PORTA = 0x00; // D0 - D7 (Also A0 - A7 for external mem interface) 19 | DDRA = 0x00; 20 | 21 | // Controls 22 | pinMode(MEM_CS, OUTPUT); 23 | pinMode(MEM_RD, OUTPUT); 24 | pinMode(MEM_WR, OUTPUT); 25 | digitalWrite(MEM_CS, 1); 26 | digitalWrite(MEM_RD, 1); 27 | digitalWrite(MEM_WR, 1); 28 | //PORTG = 0x07; 29 | //DDRG = 0x07; // PG0 = /WR PG1 = /RD PG2 = /ALE 30 | } 31 | 32 | void write_data(int addr, byte data) 33 | { 34 | PORTL = (addr >> 8); 35 | PORTC = (0x00FF & addr); 36 | PORTA = data; 37 | digitalWrite(MEM_WR, 0); 38 | digitalWrite(MEM_CS, 0); 39 | //delayMicroseconds(1); 40 | digitalWrite(MEM_WR, 1); 41 | digitalWrite(MEM_CS, 1); 42 | } 43 | 44 | byte read_data(int addr) 45 | { 46 | byte value = 0; 47 | 48 | PORTL = (addr >> 8); 49 | PORTC = 0x00FF & addr; 50 | digitalWrite(MEM_RD, 0); 51 | digitalWrite(MEM_CS, 0); 52 | //delayMicroseconds(1); 53 | value = PINA; 54 | digitalWrite(MEM_RD, 1); 55 | digitalWrite(MEM_CS, 1); 56 | 57 | return value; 58 | } 59 | 60 | void run_write_test() 61 | { 62 | Serial.print("Running Write Test\n"); 63 | 64 | PORTA = 0x00; 65 | DDRA = 0xFF; 66 | for (int i = 0; i < 2048; i++) { 67 | PORTL = (i >> 8); 68 | PORTC = 0x00FF & i; 69 | PORTA = (i & 0x00FF); 70 | digitalWrite(MEM_WR, 0); 71 | digitalWrite(MEM_CS, 0); 72 | //delayMicroseconds(1); 73 | digitalWrite(MEM_WR, 1); 74 | digitalWrite(MEM_CS, 1); 75 | } 76 | 77 | Serial.print("Complete\n"); 78 | } 79 | 80 | void run_read_test() 81 | { 82 | int value = 0; 83 | int errors = 0; 84 | 85 | Serial.print("Running Read Test\n"); 86 | 87 | PORTA = 0x00; 88 | DDRA = 0x00; 89 | for (int i = 0; i < 2050; i++) { 90 | PORTL = (i >> 8); 91 | PORTC = 0x00FF & i; 92 | digitalWrite(MEM_RD, 0); 93 | digitalWrite(MEM_CS, 0); 94 | //delayMicroseconds(1); 95 | value = PINA; 96 | digitalWrite(MEM_RD, 1); 97 | digitalWrite(MEM_CS, 1); 98 | 99 | if (value != (i & 0x00FF)) 100 | errors += 1; 101 | Serial.print(value, HEX); 102 | Serial.print(" "); 103 | if (i % 64 == 63) 104 | Serial.print("\n"); 105 | } 106 | 107 | Serial.print("\n"); 108 | Serial.print("Errors: "); 109 | Serial.print(errors, DEC); 110 | Serial.print("\n"); 111 | } 112 | 113 | inline byte convert_char(char ch) { 114 | if (ch <= 0x39) 115 | return ch - 0x30; 116 | else if (ch <= 0x46) 117 | return ch - 0x37; 118 | else 119 | return ch - 0x57; 120 | } 121 | 122 | void run_send() 123 | { 124 | int addr = 0; 125 | String data = ""; 126 | unsigned char value = 0; 127 | 128 | //Serial.setTimeout(60000); 129 | Serial.print("Waiting for data...\n"); 130 | 131 | while (!data || data.length() <= 0) { 132 | data = Serial.readString(); 133 | } 134 | 135 | Serial.print("You entered: "); 136 | Serial.print(data); 137 | Serial.print("\n"); 138 | 139 | PORTA = 0x00; 140 | DDRA = 0xFF; 141 | for (int i = 0; i < data.length() - 1; i += 2) { 142 | value = (convert_char(data[i]) << 4) | convert_char(data[i + 1]); 143 | write_data(addr++, value); 144 | Serial.print("Wrote "); 145 | Serial.print(value, HEX); 146 | Serial.print("\n"); 147 | } 148 | 149 | Serial.print("Sending complete\n"); 150 | } 151 | 152 | #define INLINE_NOP __asm__("nop\n\t"); 153 | 154 | void write_to_8155(int addr, byte data) 155 | { 156 | PORTA = 0x00; 157 | DDRA = 0xFF; 158 | 159 | PORTA = 0x00FF & addr; // address lower 160 | PORTL = (addr >> 8); // address upper 161 | digitalWrite(MEM_CS, 1); 162 | //delayMicroseconds(1); 163 | INLINE_NOP; 164 | INLINE_NOP; 165 | INLINE_NOP; 166 | INLINE_NOP; 167 | digitalWrite(MEM_CS, 0); 168 | PORTA = data; 169 | digitalWrite(MEM_WR, 0); 170 | INLINE_NOP; 171 | INLINE_NOP; 172 | INLINE_NOP; 173 | INLINE_NOP; 174 | //delayMicroseconds(1); 175 | digitalWrite(MEM_WR, 1); 176 | } 177 | 178 | void run_8155_test() 179 | { 180 | byte value = 0; 181 | 182 | Serial.print("8155 Test\n"); 183 | 184 | write_to_8155(0x1100, 0x02); 185 | delayMicroseconds(1); 186 | write_to_8155(0x1102, 0xFF); 187 | delayMicroseconds(1); 188 | 189 | PORTA = 0x00; 190 | DDRA = 0xFF; 191 | 192 | PORTA = 0x00; // address lower 193 | PORTL = 0x11; // address upper 194 | digitalWrite(MEM_CS, 1); 195 | INLINE_NOP; 196 | INLINE_NOP; 197 | INLINE_NOP; 198 | INLINE_NOP; 199 | //delayMicroseconds(1); 200 | digitalWrite(MEM_CS, 0); 201 | INLINE_NOP; 202 | digitalWrite(MEM_RD, 0); 203 | INLINE_NOP; 204 | PORTA = 0x00; 205 | DDRA = 0x00; 206 | value = PINA; 207 | //delayMicroseconds(1); 208 | digitalWrite(MEM_RD, 1); 209 | Serial.print(value, HEX); 210 | Serial.print("\n"); 211 | } 212 | 213 | void setup() 214 | { 215 | Serial.begin(SERIAL_SPEED); 216 | 217 | init_bus(); 218 | } 219 | 220 | void loop() 221 | { 222 | String line = Serial.readString(); 223 | if (line.equals("read\n")) { 224 | run_read_test(); 225 | } 226 | else if (line.equals("write\n")) { 227 | run_write_test(); 228 | } 229 | else if (line.equals("send\n")) { 230 | run_send(); 231 | } 232 | else if (line.equals("8155\n")) { 233 | run_8155_test(); 234 | } 235 | } 236 | 237 | -------------------------------------------------------------------------------- /software/monitor/Makefile: -------------------------------------------------------------------------------- 1 | 2 | GLOWORM = ../gloworm 3 | 4 | include $(GLOWORM)/config.mk 5 | 6 | ASLISTING = -alh 7 | 8 | 9 | MONITOR_OBJS = \ 10 | crt0.o \ 11 | monitor.o \ 12 | vectors.o \ 13 | tty_68681.o \ 14 | $(GLOWORM)/libc-68k-none.a 15 | 16 | all: monitor.bin monitor.load 17 | 18 | term: 19 | pyserial-miniterm /dev/ttyUSB0 38400 20 | 21 | $(GLOWORM)/libc-68k-none.a $(GLOWORM)/libc-68k-os.a: 22 | make -C $(GLOWORM)/src/libc ../../$@ 23 | 24 | 25 | monitor.bin: CFLAGS += -mpcrel 26 | 27 | 28 | monitor.bin: $(MONITOR_OBJS) 29 | $(CC) $(CFLAGS) $(LDFLAGS) --entry=_start -Tmonitor.ld -o $@.elf $^ 30 | $(CC) $(CFLAGS) $(LDFLAGS) --entry=_start -Tmonitor.ld -Wl,--oformat=binary -o $@ $^ 31 | hexdump -v -e '/1 "0x%02X, "' $@ > output.txt 32 | 33 | %.load: %.bin 34 | tools/make-load-file $^ $@ $(LOAD_ARGS) 35 | 36 | %.send: %.bin 37 | tools/make-send-file $^ $@ 38 | 39 | %.o: %.c 40 | $(CC) $(CFLAGS) -c -o $@ $< 41 | 42 | %.o: %.s 43 | $(AS) $(ASFLAGS) -c -o $@ $< 44 | 45 | clean: 46 | make -C $(GLOWORM) clean 47 | find . \( -name "*.o" -or -name "*.a" -or -name "*.bin" -or -name "*.elf" -or -name "*.load" \) -delete -print 48 | 49 | -------------------------------------------------------------------------------- /software/monitor/crt0.s: -------------------------------------------------------------------------------- 1 | 2 | .global _start 3 | .global _error 4 | .global main 5 | 6 | .section .text 7 | 8 | /** 9 | * Image Start 10 | */ 11 | 12 | _start: 13 | 14 | | Disable interrupts and reset VBR 15 | move.w #0x2700, %sr 16 | .ifdef __mc68010__ 17 | clr %d0 18 | movec %d0, %vbr 19 | .endif 20 | 21 | |move.w #0x2000, %sr | enable all interrupts 22 | 23 | bsr main 24 | stop #0x2700 25 | 26 | -------------------------------------------------------------------------------- /software/monitor/monitor.ld: -------------------------------------------------------------------------------- 1 | ENTRY(_start) 2 | EXTERN(_start) 3 | SECTIONS 4 | { 5 | .vectors 0x0000 : { *(.vectors) } 6 | .text 0x0040 : { *(.text) } 7 | .rodata : { *(.rodata) } 8 | /*. = 0x1400;*/ 9 | .data : { *(.data) } 10 | .bss : { *(.bss) } 11 | } 12 | -------------------------------------------------------------------------------- /software/monitor/tty_68681.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | // MC68681 Register Addresses 5 | #define MR1A_MR2A_ADDR ((volatile uint8_t *) 0x700001) 6 | #define SRA_RD_ADDR ((volatile uint8_t *) 0x700003) 7 | #define CSRA_WR_ADDR ((volatile uint8_t *) 0x700003) 8 | #define CRA_WR_ADDR ((volatile uint8_t *) 0x700005) 9 | #define TBA_WR_ADDR ((volatile uint8_t *) 0x700007) 10 | #define RBA_RD_ADDR ((volatile uint8_t *) 0x700007) 11 | #define ACR_WR_ADDR ((volatile uint8_t *) 0x700009) 12 | 13 | #define CTUR_WR_ADDR ((volatile uint8_t *) 0x70000D) 14 | #define CTLR_WR_ADDR ((volatile uint8_t *) 0x70000F) 15 | #define START_RD_ADDR ((volatile uint8_t *) 0x70001D) 16 | #define STOP_RD_ADDR ((volatile uint8_t *) 0x70001F) 17 | 18 | #define IPCR_RD_ADDR ((volatile uint8_t *) 0x700009) 19 | #define OPCR_WR_ADDR ((volatile uint8_t *) 0x70001B) 20 | #define INPUT_RD_ADDR ((volatile uint8_t *) 0x70001B) 21 | #define OUT_SET_ADDR ((volatile uint8_t *) 0x70001D) 22 | #define OUT_RESET_ADDR ((volatile uint8_t *) 0x70001F) 23 | 24 | #define ISR_RD_ADDR ((volatile uint8_t *) 0x70000B) 25 | #define IMR_WR_ADDR ((volatile uint8_t *) 0x70000B) 26 | #define IVR_WR_ADDR ((volatile uint8_t *) 0x700019) 27 | 28 | 29 | // MC68681 Command Numbers 30 | #define CMD_RESET_MR 0x10 31 | #define CMD_RESET_RX 0x20 32 | #define CMD_RESET_TX 0x30 33 | #define CMD_RESET_ERROR 0x40 34 | #define CMD_ENABLE_TX_RX 0x05 35 | #define CMD_ENABLE_RX 0x01 36 | #define CMD_DISABLE_RX 0x02 37 | #define CMD_ENABLE_TX 0x04 38 | #define CMD_DISABLE_TX 0x08 39 | #define CMD_START_BREAK 0x60 40 | #define CMD_STOP_BREAK 0x70 41 | 42 | 43 | // MC68681 Default Configuration Values 44 | #define MR1A_MODE_A_REG_1_CONFIG 0b10010011 // RxRTS Enabled, 8 bits, No Parity 45 | #define MR2A_MODE_A_REG_2_CONFIG 0b00000111 // Normal mode, CTS Disabled, 1 stop bit 46 | //#define CSRA_CLK_SELECT_REG_A_CONFIG 0b10111011 // 9600 bps @ 3.6864MHz (19200 @ 7.3728 MHz) 47 | //#define ACR_AUX_CONTROL_REG_CONFIG 0b11111000 // Set2, External Clock / 16, IRQs disabled 48 | #define CSRA_CLK_SELECT_REG_A_CONFIG 0b11001100 // 38400 bps @ 3.6864MHz 49 | #define ACR_AUX_CONTROL_REG_CONFIG 0b01111000 // Set1, External Clock / 16, IRQs disabled except IP3 50 | 51 | 52 | // Status Register Bits (SRA/SRB) 53 | #define SR_RECEIVED_BREAK 0x80 54 | #define SR_FRAMING_ERROR 0x40 55 | #define SR_PARITY_ERROR 0x20 56 | #define SR_OVERRUN_ERROR 0x10 57 | #define SR_TX_EMPTY 0x08 58 | #define SR_TX_READY 0x04 59 | #define SR_RX_FULL 0x02 60 | #define SR_RX_READY 0x01 61 | 62 | 63 | // Interrupt Status/Mask Bits (ISR/IVR) 64 | #define ISR_INPUT_CHANGE 0x80 65 | #define ISR_CH_B_BREAK_CHANGE 0x40 66 | #define ISR_CH_B_RX_READY_FULL 0x20 67 | #define ISR_CH_B_TX_READY 0x10 68 | #define ISR_TIMER_CHANGE 0x08 69 | #define ISR_CH_A_BREAK_CHANGE 0x04 70 | #define ISR_CH_A_RX_READY_FULL 0x02 71 | #define ISR_CH_A_TX_READY 0x01 72 | 73 | 74 | #define TTY_INT_VECTOR 7 75 | 76 | 77 | extern void delay(int count); 78 | 79 | int init_tty() 80 | { 81 | asm volatile("or.w #0x0700, %sr"); 82 | 83 | *CRA_WR_ADDR = CMD_RESET_MR; 84 | 85 | *MR1A_MR2A_ADDR = MR1A_MODE_A_REG_1_CONFIG; 86 | *MR1A_MR2A_ADDR = MR2A_MODE_A_REG_2_CONFIG; 87 | *CSRA_WR_ADDR = CSRA_CLK_SELECT_REG_A_CONFIG; 88 | *ACR_WR_ADDR = ACR_AUX_CONTROL_REG_CONFIG; 89 | 90 | *CRA_WR_ADDR = CMD_RESET_ERROR; 91 | asm volatile("nop\n"); 92 | *CRA_WR_ADDR = CMD_RESET_RX; 93 | asm volatile("nop\n"); 94 | *CRA_WR_ADDR = CMD_RESET_TX; 95 | asm volatile("nop\n"); 96 | *CRA_WR_ADDR = CMD_ENABLE_TX_RX; 97 | 98 | 99 | // Configure timer 100 | //*CTUR_WR_ADDR = 0xFF; 101 | //*CTLR_WR_ADDR = 0xFF; 102 | 103 | //_buf_init(tx); 104 | 105 | // Disable interrupts 106 | *IMR_WR_ADDR = 0x00; 107 | 108 | // Enable interrupts 109 | *IVR_WR_ADDR = TTY_INT_VECTOR; 110 | //*IMR_WR_ADDR = ISR_CH_A_RX_READY_FULL; 111 | //*IMR_WR_ADDR = ISR_CH_A_TX_READY; 112 | 113 | 114 | // Turn ON Test LED 115 | *OPCR_WR_ADDR = 0x00; 116 | *OUT_SET_ADDR = 0xF0; 117 | *OUT_RESET_ADDR = 0xF0; 118 | 119 | // This slight delay prevents garbled output being sent during the welcome message 120 | delay(100); 121 | 122 | // Assert CTS 123 | *OUT_SET_ADDR = 0x01; 124 | } 125 | 126 | int getchar(void) 127 | { 128 | char in; 129 | char status; 130 | 131 | // Assert CTS 132 | *OUT_SET_ADDR = 0x01; 133 | while (1) { 134 | //if (tty_read_out < tty_read_in) 135 | // return tty_read_buffer[tty_read_out++]; 136 | status = *SRA_RD_ADDR; 137 | if (status & SR_RX_READY) { 138 | // De-Assert CTS 139 | *OUT_RESET_ADDR = 0x01; 140 | return *RBA_RD_ADDR; 141 | } 142 | 143 | // Debugging - Set LEDs to the upper status bits of channel A 144 | if (in & 0xF0) { 145 | *OUT_SET_ADDR = in; 146 | *OUT_RESET_ADDR = (~in & 0xF0); 147 | } 148 | 149 | /* 150 | // Debugging - Set all LEDs on if an input is active 151 | in = (*INPUT_RD_ADDR & 0x3f); 152 | if (in & 0x18) { 153 | *OUT_SET_ADDR = 0xF0; 154 | } else { 155 | *OUT_RESET_ADDR = 0xF0; 156 | } 157 | */ 158 | 159 | /* 160 | // Debugging - Set LEDs on timer 161 | if (*ISR_RD_ADDR & ISR_TIMER_CHANGE) { 162 | if (tick) { 163 | tick = 0; 164 | *OUT_SET_ADDR = 0x80; 165 | } else { 166 | tick = 1; 167 | *OUT_RESET_ADDR = 0x80; 168 | } 169 | register char reset = *STOP_RD_ADDR; 170 | } 171 | */ 172 | } 173 | } 174 | 175 | int putchar(int ch) 176 | { 177 | while (!(*SRA_RD_ADDR & SR_TX_READY)) { } 178 | *TBA_WR_ADDR = (char) ch; 179 | return ch; 180 | } 181 | 182 | void set_leds(uint8_t bits) 183 | { 184 | *OUT_SET_ADDR = bits << 4; 185 | } 186 | 187 | void reset_leds(uint8_t bits) 188 | { 189 | *OUT_RESET_ADDR = bits << 4; 190 | } 191 | -------------------------------------------------------------------------------- /software/monitor/tty_arduino.c: -------------------------------------------------------------------------------- 1 | 2 | #include "tty.h" 3 | 4 | 5 | static char *tty_out = (char *) 0x2007; 6 | static char *tty_in = (char *) 0x2007; 7 | static char *tty_status = (char *) 0x2003; 8 | 9 | int init_tty() 10 | { 11 | return 0; 12 | } 13 | 14 | int getchar(void) 15 | { 16 | while (1) { 17 | if (*tty_status & 0x01) 18 | return *tty_in; 19 | } 20 | } 21 | 22 | int putchar(int ch) 23 | { 24 | while (!(*tty_status & 0x04)) { } 25 | *tty_out = ch; 26 | return ch; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /software/monitor/vectors.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | 5 | #define STACK_POINTER_INIT 0x200000 6 | 7 | extern void _start(); 8 | extern void _error(); 9 | extern void init_tty(); 10 | extern void set_leds(uint8_t bits); 11 | extern void dump(const uint16_t *addr, short len); 12 | 13 | void fatal_error_entry(); 14 | 15 | typedef void (*interrupt_handler_t)(); 16 | 17 | const interrupt_handler_t boot_vectors[16] __attribute__((section(".vectors"))) = { 18 | (interrupt_handler_t) STACK_POINTER_INIT, 19 | _start, 20 | fatal_error_entry, 21 | fatal_error_entry, 22 | fatal_error_entry, 23 | fatal_error_entry, 24 | fatal_error_entry, 25 | fatal_error_entry, 26 | fatal_error_entry, 27 | fatal_error_entry, 28 | fatal_error_entry, 29 | fatal_error_entry, 30 | fatal_error_entry, 31 | fatal_error_entry, 32 | fatal_error_entry, 33 | fatal_error_entry, 34 | }; 35 | 36 | asm( 37 | "fatal_error_entry:\n" 38 | // move.b #0x01, %d0 39 | // lea 0x201d, %a0 40 | // move.b %d0, (%a0) | set the arduino led as an error indicator 41 | 42 | " move.l %a6, -(%sp)\n" 43 | " move.l %a5, -(%sp)\n" 44 | " move.l %a4, -(%sp)\n" 45 | " move.l %a3, -(%sp)\n" 46 | " move.l %a2, -(%sp)\n" 47 | " move.l %a1, -(%sp)\n" 48 | " move.l %a0, -(%sp)\n" 49 | " move.l %d7, -(%sp)\n" 50 | " move.l %d6, -(%sp)\n" 51 | " move.l %d5, -(%sp)\n" 52 | " move.l %d4, -(%sp)\n" 53 | " move.l %d3, -(%sp)\n" 54 | " move.l %d2, -(%sp)\n" 55 | " move.l %d1, -(%sp)\n" 56 | " move.l %d0, -(%sp)\n" 57 | "\n" 58 | " move.l %sp, -(%sp)\n" 59 | " bsr fatal_error\n" 60 | " | stop #0x2700\n" 61 | " | Jump to the monitor instead of stopping\n" 62 | " jmp 0x40\n" 63 | " rte\n" 64 | ); 65 | 66 | void fatal_error(uint8_t *sp) 67 | { 68 | set_leds(0x80); 69 | init_tty(); 70 | set_leds(0x80); 71 | 72 | printf("\n\nFatal Error with SP: %x\n", sp); 73 | printf("PC: %x\nStack Dump with Registers:\n", *((uint32_t *) &sp[15 * 4 + 2])); 74 | dump(sp, 100); 75 | printf("Resetting...\n"); 76 | } 77 | 78 | 79 | -------------------------------------------------------------------------------- /software/tools/load.py: -------------------------------------------------------------------------------- 1 | 2 | import time 3 | import serial 4 | import argparse 5 | 6 | devicefile = '/dev/ttyUSB0' 7 | #baud = 9600 8 | baud = 38400 9 | 10 | def main(): 11 | parser = argparse.ArgumentParser(prog='load', description='Load a program over serial into Computie68k') 12 | parser.add_argument('filename') 13 | parser.add_argument('-d', '--device', nargs='?', default=devicefile, help='Use an alternate serial device') 14 | parser.add_argument('-l', '--limit', action='store_true', help='Limit the speed of transmission') 15 | args = parser.parse_args() 16 | 17 | try: 18 | tty = serial.Serial(args.device, baud, rtscts=True) 19 | except serial.serialutil.SerialException as exc: 20 | print("serial error: " + str(exc)) 21 | return 22 | 23 | print("Opening {}".format(args.filename)) 24 | with open(args.filename, 'r') as f: 25 | while True: 26 | ch = f.read(1) 27 | if not ch: 28 | break 29 | if args.limit: 30 | time.sleep(0.001) 31 | #time.sleep(0.05) 32 | tty.write(bytes(ch, 'ascii')) 33 | 34 | tty.close() 35 | 36 | if __name__ == '__main__': 37 | main() 38 | 39 | -------------------------------------------------------------------------------- /software/tools/make-load-file: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | SRC=$1 4 | DEST=${2-"$1.load"} 5 | ADDR=$3 6 | BOOTARGS=$4 7 | 8 | echo "load $ADDR" > $DEST 9 | wc -c $SRC | awk '{printf "%04X", $1}' >> $DEST 10 | hexdump -v -e '/1 "%02X"' $SRC >> $DEST 11 | echo "\nboot $ADDR $BOOTARGS" >> $DEST 12 | -------------------------------------------------------------------------------- /software/tools/make-send-file: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | SRC=$1 4 | DEST=${2:-"$1.send"} 5 | NAME=${3:-$1} 6 | 7 | echo "send $NAME" > $DEST 8 | wc -c $SRC | awk '{printf "%04X", $1}' >> $DEST 9 | hexdump -v -e '/1 "%02X"' $SRC >> $DEST 10 | -------------------------------------------------------------------------------- /software/welcome.s: -------------------------------------------------------------------------------- 1 | 2 | .org 0x0000 3 | 4 | | Stack Pointer on Reset 5 | .word 0x0000 6 | .word 0x1000 7 | | PC on Reset 8 | .word 0x0000 9 | .word 0x0020 10 | 11 | .org 0x0020 12 | _start: 13 | 14 | move.b #0x01, %d1 15 | lea 0x02ff, %a1 16 | move.b %d1, (%a1) 17 | |move.b %d1, 0x02ff 18 | 19 | 20 | /* 21 | bsr test 22 | stop #0x2700 23 | 24 | test: 25 | rts 26 | */ 27 | 28 | /* 29 | move.l #0x65, %d2 30 | lea 0x02f1, %a2 31 | move.b %d2, (%a2) 32 | */ 33 | 34 | |move.l message_end - message, %d1 35 | |lea message, %a1 36 | lea 0x0050, %a1 37 | lea 0x02f1, %a2 38 | 39 | loop: 40 | move.b (%a1)+, %d2 41 | move.b %d2, (%a2) 42 | 43 | cmpi.b #0x00, %d2 44 | bne loop 45 | 46 | 47 | /* 48 | move.l #0x0002, %d2 49 | delay: 50 | subi.w #0x01, %d2 51 | cmpi.w #0x00, %d2 52 | bne delay 53 | */ 54 | 55 | stop #0x2700 56 | 57 | .org 0x0050 58 | message: .ascii "Welcome to Bread68k!\n\n\0" 59 | message_end: 60 | 61 | -------------------------------------------------------------------------------- /todo.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | Post: 4 | * I need to elaborate on how I did things, what broke, how I fixed it... It's a bit too much a list of what I did rather than something helpful 5 | 6 | Monitor: 7 | 8 | * failure vectors don't point to the correct addresses, from the looks of it 9 | 10 | * can you have an debugger in the monitor software? There are trap and breakpoint instructions in the processor for debugging, so if you define an interrupt handler 11 | for those, you could have it enter a debugger, that possibly allows single stepping? I'm not sure how to implement that 12 | 13 | 14 | k30-SBC: 15 | * you could use the extra 2-4 decoder for onboard I/O within IOSEL (ie. MC68681 would remain the same, ATA I/O would be moved to 0x700100, and two more devices could be added 16 | * is 16 clocks enough for the BERR? It should be 480us which should be enough 17 | * look into the CIIN signals and stuff 18 | 19 | 20 | 68k Single Board Computer: 21 | 22 | * can you add a video/lcd expansion via the expansion connector? Maybe you could get ends to directly connect it? Would it be via parallel interface? 23 | would you need a PIT 68230 to interface? How complex are the interfaces of those graphic ones? 24 | * can you connect an esp01 as a wifi device? I suppose you could connect it to the other serial port, even though it would be slow 25 | 26 | 27 | 68k Arduino Shield: 28 | (nothing atm) 29 | 30 | 31 | 68k SMT: 32 | (nothing atm) 33 | 34 | 35 | * should you move the Z80 project into it's own repo? 36 | 37 | --------------------------------------------------------------------------------